Медленная выборка из 300 000 строк:(

evshi

Новичок
Медленная выборка из 300 000 строк:(

Есть таблица с более чем 300 000 строками. Один из столбцов - название книги - текстовое поле.

Если делаю select вида select * from table where book_name like '%search%', то поиск идет очень долго. Пробовал делать индекс с длиной 7 символов на book_name - не помогло. Как еще можно ускорить поиск?
 

evshi

Новичок
Использовал fulltext и match - помогло частично: поиск стал быстрее, но если пытаться делать поиск по коротким фразам, например, "аба", то возвращает 0, хотя запрос like '%аба%' выдает найденные записи.

Почему так?

Кажется понял - это из-за fulltext: теперь находит только полностью совпавшие слова:(

А можно ли использовать match, но в тоже время делать поиск по частичному совпадению фраз?
 

evshi

Новичок
Разобрался: надо использовать конструкцию match against в IN BOOLEAN MODE и *.

И все таки не до конца разобрался:(

в текущем виде (select ... where match(book_name) against('П*' in boolean mode) выведет все строки, где не только первое слово начинается на П, но и последующие. Например, выведет во-первых (т.к. второе слово начинается с П).

А как сделать, чтобы выбирались только записи, где book_name начинается ТОЛЬКО с П, а последующие слова не учитывались бы?
 
Сверху