|
Тема |
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.
|
| |
|
|
|