Оптимизация запросов Mysql - PullRequest
1 голос
/ 02 мая 2011

Я использую этот запрос для поиска, но запрос медленный.Может кто-нибудь предложить мне альтернативу для этого запроса?

SELECT c.ctgr_name,n.lgcode,n.newsID,n.newsTITLE,n.image3,n.ctgr_code 
FROM tbnews  n LEFT JOIN tbcategory c ON c.ctgr_code=n.ctgr_code  
WHERE (newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%" 
OR newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%" ) 
AND (n.publish!=0) 
ORDER BY newsID DESC LIMIT 10

Ответы [ 3 ]

1 голос
/ 02 мая 2011

1) Всегда запускайте EXPLAIN SELECT, прежде чем запрашивать оптимизацию.Вставьте ключевое слово «EXPLAIN» перед запросом, а затем запустите его - MySQL скажет вам, что он хочет сделать, и вы сразу увидите, где он застрял и где он не использует индексы.

2) ИспользованиеLIKE поиск «%%» (со знаком процента до и после ключевого слова) заставляет MySQL выполнять полное сканирование таблицы.Использование поиска, такого как LIKE 'keyword%', МОЖЕТ заставить MySQL использовать индекс в этом поле, если индекс существует.

3) Сконфигурировать ваш экземпляр MySQL, настроить конфигурацию и использовать соответствующий механизм хранения, который может повысить производительностьогромный запасПо умолчанию MySQL настроен на работу на очень медленных машинах и использует очень мало ресурсов - следовательно, когда таблица становится немного больше (скажем, 100 тыс. Строк), люди замечают снижение производительности.MySQL может легко справиться с большими таблицами, если настроен правильно.

0 голосов
/ 02 мая 2011

Индексирование, вероятно, не поможет при поиске типа LIKE "% Foray%", так как каждую строку в базе данных необходимо сканировать.

Если вы ищете отдельные слова, вы можете извлечь отдельные слова в отдельную таблицу, которую вы можете эффективно индексировать, и ссылаться на них в исходных записях.Это займет больше места, но немного увеличит скорость.

0 голосов
/ 02 мая 2011

Использование конструкций LIKE "% Foray %" в неиндексном поле значительно замедлит запрос. Чем больше у вас данных, тем больше времени потребуется.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...