Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 00:52 09.06.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема Я докато чакам...  
Автор bass (so deep!)
Публикувано28.04.03 15:00



да взема да запитам:
Нормално ли е MySQL да индексира ~90000 записа по DateTime за повече от десет (към часа на поста) минути?
За фултекст съм склонен да го приема за нормално, но за datetime...
Просто не ми се ще да го спирам по средата, ако случайно не е забил :-)
p.s. V4.0.1

Редактирано от bass на 28.04.03 15:02.



Тема Re: Още чакам, но за друго...нови [re: bass]  
Автор bass (so deep!)
Публикувано28.04.03 17:12



Индексирането мина, но не реши проблема.
Цялата работа e заради тази заявка:

SELECT Title FROM Articles
WHERE FolderId = <SomeId>
AND Edited = <SomeDate>
AND MATCH(Title, UpperHead, SubHead, Body, Author) AGAINST('SomeWords' IN BOOLEAN MODE)

Изпълнява се за едно и също (дъъъългичко) време в горния и в този вид:

SELECT Title FROM Articles
WHERE MATCH(Title, UpperHead, SubHead, Body, Author) AGAINST('SomeWords' IN BOOLEAN MODE)
AND FolderId = <SomeId>
AND Edited = <SomeDate>

т.е., не забелязвам обичайната оптимизация (отляво надясно) на условен израз с AND.

Някои подробности и наблюдения:
1. Има индекси по всички полета в WHERE-клаузата;
2. Има не повече от 200 записа с едно и също FolderId;
3. Заявките само с WHERE FolderId=<SomeId> се изпълняват светкавично (а вече и тези с Edited, вследствие на индексирането от първия пост :-\ );
4. Полето Body съдържа доста текст и фултекст-търсенето е времеемко;
5. Именно като следствие от 3 и 4 слагам първо "филтъра" по FolderId и после по FullText.
6. ... но ефект няма.

Отивам пак да чета и пробвам, пък ако някой даде и hint ... :-)

p.s.: След кратък размисъл ми хрумна, че може би причнината е в начина на работа на fulltext-индекса. Ако не се лъжа, той съдържа съответствие "Дума"->"Записи", като подреждането е по "Дума", и в такъв случай няма как предварително да се определят (ограничат) записите, в които да се търси. ДАНО ДА НЕ СЪМ ПРАВ!
Но май съм близо, защото като сменя MATCH-AGAINST с LIKE (което рови само в текущия запис), заявката лети. Само че така не ми върши работа :-((


Редактирано от bass на 28.04.03 20:27.



Тема Re: Още чакам, но за друго...нови [re: bass]  
Автор salle (член)
Публикувано28.04.03 22:53



1. Първо и най-важно.

4.0.12 е налице без да е алфа, бета, гама. 4.0.13 трябва да излезе тази седмица.

2. А ти за EXPLAIN не си ли чувал?

3. За Full-text. Естествено, че си прав. Ако имаш идея как да се направи по-добре - кажи.

4. "Има индекси по всички полета в WHERE-клаузата"
Което, ще рече че индексите не са ти добре оптимизирани ако имаш предвид отделен индекс за всяка колона.

MySQL може да използва Един И Само Един Индекс на таблица в дадена заявка.

Което пък ще рече, че за твоята заявка един доста добър индекс (вероятно) би бил
(FolderId, Edited) - защото той ще работи за
FolderId = <> AND Edited = <>
Докато от два отделни MySQL ще избере само единия.


5. "слагам първо "филтъра" по ..." Къде това? Никъде нищо не слагаш. Четиво за заспиване: USE INDEX, FORCE INDEX, IGNORE INDEX

6. Ами отговора на първия постинг ти го даде във втория. Индексите са ти много т.е. доста големички. Вероятно .MYI файла ти е около три пъти по-голям от .MYD

PS Много EXPLAIN ....

Редактирано от salle на 28.04.03 22:53.



Тема Re: Още чакам, но за друго...нови [re: salle]  
Автор bass (so deep!)
Публикувано29.04.03 10:56



Иии, гледай какви работи може да се случат от неточен изказ и заплесия :-\\
Айде пак по точки:
1. Както се вижда от коментарите (и моите, и твоите), проблемът е принципен и не опира толкова до версията (fulltext-търсенето си е пъргаво само по себе си, намесих го за да се опитам да обясня проблема);
2. EXPLAIN ми каза същото, което установих и емпирично след първите няколко теста :-));
4. Индексът е точно (FolderId, Edited);
5. И тука стигаме до основното объркване: Някак си се подлъгах да разсъждавам по логиката на повечето компилатори при смятане на израз от типа "Cond1 AND Cond2 AND ... AND CondN". Тук изчисленията тръгват отляво и продължават надясно само ако има смисъл (т.е., всички изчислени до момента условия са TRUE). В контекста на DB-то, това разсъждение изглежда така:
"Взимаш всички записи с необходимото FolderId (филтър 1) и после претърсваш само тях за ключовите думи". Очевидно неприложимо с fulltext-индекс (както и загрях в предния си пост).

btw, Articles.MYD=350MB, Articles.MYI=202MB. Не съм се замислял да анализирам големините, а може би трябва.



Тема Re: Още чакам, но за друго...нови [re: bass]  
Автор salle (член)
Публикувано29.04.03 15:29



хмм....

Значи не си мниги прав за компилаторите защото един добре опитимизилащ компилатор може да се усети, че примерно 3-тото условие в един AND е винаги вярно и да промени реда на изчисление.

При SQL сървърите пък иде реч за Оптимизатор а на него това му е работата - да измисли най-добрия план.
В твоя случая ако имаше два индекса по FolderId и Edited оптимизатора на базата на статистиката за индексите ще предпочете единия или другия - този който ограничава повече броя на редовете.

Т.е. ако оптимизатора очаква, че
FolderId = <> ще върне 20000 реда
а
Edited = <> само 150 то тогава тава е по-добрият кандидат за индекс и съответно и това условие в AND е по-добре да се приложи първо.

Следващият момент е, че индексите при MyISAM преди 4.1 са само B-tree поради което те работят най-добре по Префикс.

И в горния пример индекс (Edited, FolderId) ще бъде за предпочитане пред (FolderId, Edited) а ако разликата е толкова голяма моеж да се окаже и, че FolderId изобщо нама смисъл да ес индексира ....

Абе то това си едно тресавище от теория, практика, проби и грешки ...



Тема Re: Още чакам, но за друго...нови [re: salle]  
Автор bass (so deep!)
Публикувано29.04.03 16:41



Мисля, че стана ясно :-\
Само да уточня, че в повечето случаи (коментираната заявка е изключение) датата не ме вълнува и ползвам индекс само по FolderId, та затва съм сложил реда така (FolderId, Edited)




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.