2

Вопрос о выпуске базы данных/скорости на веб-сайте PHP/MySql. Запрос с полнотекстовым поиском кажется очень медленным.Полнотекстовый индекс и скорость поиска

Я не эксперт по SQL, просто простое базовое программирование php/html для базовых сайтов и некоторых базовых знаний MySQL. У клиента есть проблемы с скоростью для опции поиска на сайте, разработанной внешним программистом, которая больше не доступна. Мы нашли следующую информацию:

  • База данных MySQL со столом с примерно 225000 строками (myISAM).

  • столбец (DATA) с полным текстом, содержащий данные, которые необходимо искать.

  • Эта колонка содержит в среднем 200 слов на строку.

  • В PHPMyAdmin (у нас есть только PHPMYADMIN-доступ и не FTP не прямой доступа сервера), мы видим, что мощность полнотекстового индекса 1.

  • Существует один конкретный запрос, который, как представляется, очень медленно, когда в PHPMyAdmin мы выполнить EXPLAIN для этого запроса он возвращает:

    id select_type table type possible_keys key key_len ref rows Extra 1 
    SIMPLE T_SEARCHDATA fulltext DATA DATA 0 1 Using where; Using 
    filesort 1 SIMPLE TU_CUS const PRIMARY PRIMARY 4 const 1 Using 
    index 1 SIMPLE M_CATEGORY eq_ref PRIMARY PRIMARY 4 
    buitenbeeld.T_SEARCHDATA.PC_ID 1 Using index 
    

При выполнении запроса он принимает бросить курить некоторое время до того, как запрос будет выполнен, используется следующий запрос:

SELECT T_SEARCHDATA.MID,T_SEARCHDATA.MT_IMG,T_SEARCHDATA.MP_IMG,T_SEARCHDATA.M_ACTIVE,T_SEARCHDATA.TITLE 
    FROM T_SEARCHDATA LEFT JOIN TU_CUS ON TU_CUS.UB_ID = 0 LEFT 
    JOIN M_CATEGORY ON M_CATEGORY.PC_ID = T_SEARCHDATA.PC_ID 
    WHERE MATCH (T_SEARCHDATA.DATA) AGAINST ('+searchword1* +searchword2* +searchword3*' IN BOOLEAN MODE) AND M_ACTIVE = 1 ORDER BY T_SEARCHDATA.UPDATE DESC 
    LIMIT 0,30 

Наша задача

Запрос выше принимает от 5 до даже 30 секунд, чтобы выполнить в зависимости от точного поиска слов. После первого раза мы выполняем запрос во второй раз, когда он очень быстрый, похоже, что какое-то кэширование активировано ???

Некоторые из моих более конкретных вопросов:

  1. Это хорошо, что мощность для индекса полнотекстового является 1? Найдены ответы на эту тему, но нет однозначного ответа на вопрос, почему этот будет в порядке для полного индекса.

  2. Что касается скорости, не странно ли, что база данных из 225000 строк (вероятно, до 300 000 в ближайшие недели) требует много времени для выполнения этого запроса? Что-то не так с запросом, может ли оно быть оптимизировано?

  3. Является ли полнотекстовый поиск наилучшим вариантом в этом случае?

+0

Я имел эту проблему, но я использовал ДУМАТЬ СФИНКС очень полезно –

+0

Ну я не рекомендую использовать полнотекстовый поиск как плагин попробуйте использовать другой путь к search –

+0

Спасибо за ответ, я никогда не слышал о Сфинксе, но, прочитав еще немного об этом, я обязательно попробую. – user3272710

ответ

1
  1. Мощности для индексов FULLTEXT кажется, сообщается, как 1 всегда. В любом случае, кардинальность действительно не актуальна для полнотекстовых индексов, поэтому значение 1 может быть просто заполнителем.

  2. Убедитесь, что у вас есть достаточно key_buffer_size, чтобы держать полный текст. Если в каждом запросе он должен будет обменивать часть индекса в буфере ключей и из него, это приведет к урону производительности.

  3. Sphinx Searchusually faster чем полный текстовый индекс MySQL.

+0

Спасибо за ваш ответ. Я не знал о Сфинксе, но, прочитав немного больше об этом, я обязательно попробую. – user3272710

0

Я рекомендовал использовать мышление, сфинкс очень полезен.

Здесь вы можете найти все Informacion:

http://pat.github.io/thinking-sphinx/installing_sphinx.html 
Смежные вопросы