Andrey-X
Guest
Оптимизация поиска на MySQL
Уважаемые, нужна ваша помосчь...
Задача:
1)написать поиск по сайту по фразе целиком и по каждому из слов
2)остортировать и вывести первыми группу в которой была найдена фраза целиком, а потом уже остортированную группу в которой совпадения частичны (т.е. 2 отдельных группы, каждая со своей сортировкой)
Предпринято:
1)создан запрос вида (фраза предварительно бьется на слова):
select id, YEAR(ddate) as yy, MONTH(ddate) as mm, DAYOFMONTH(ddate) as dd, zagolovok, telo from doctable where zagolovok like '%поиск%' or telo like '%поиск%' or zagolovok like '%сайт%' or telo like '%сайт%'
2)полученнЫй массив обрабатывает в ПХП и разчленяется на 2 массива с полным совпадением и частичным. к ним применяется сортировка
3)к массивам применяются фильтры по показу (за какое число, месяц и т.п.) + производится поиск контекста (для подсветки)
4)все это добро записывается в сессию и начинается постраничный вывод
Проблемы/Перспективы:
1) запрос дико тормозит систему (загрузка проца сервака под 99%), причем при прямом запросе (т.е. без поиска по отдельному слову - все летает).Также тормоза не по сортировке и записи/считыванию массива в пхп, а именно по поиску... и если учесть что фраза будет скажем из 4,5 слов, то становится страшно...
2) возможно сессия не лучшее место для хранения таких данных, и было б интересней кинуть все это во врем. таблицу, создаваюемую по сессии, но пугают некоторые вещи:
- возможно увеличится время выборки, т.к. сначала придется портировать данные во врем таблицу, а потом изнова из нее считывать
- не понятно каким чертом можно разграничить данные с частичным совпадением и полным по фразе (не делать же 2 отдельных скл запроса? или сортировать массив в пхп а потом вливать Insert-ом в таблицу)
Вопросы:
1) как можно пооптимизировать сей запрос? есть методы и насколько сие поможет?
2) как поступить с временной таблицей? насколько я понимаю, создав п-коннект с базой и прилипив оную она будет существовать до закрытия броузера (на всех стадиях крутится 1 скрип, который вызывает сам себя с параметрами для перелистывания страниц)
Уважаемые, нужна ваша помосчь...
Задача:
1)написать поиск по сайту по фразе целиком и по каждому из слов
2)остортировать и вывести первыми группу в которой была найдена фраза целиком, а потом уже остортированную группу в которой совпадения частичны (т.е. 2 отдельных группы, каждая со своей сортировкой)
Предпринято:
1)создан запрос вида (фраза предварительно бьется на слова):
select id, YEAR(ddate) as yy, MONTH(ddate) as mm, DAYOFMONTH(ddate) as dd, zagolovok, telo from doctable where zagolovok like '%поиск%' or telo like '%поиск%' or zagolovok like '%сайт%' or telo like '%сайт%'
2)полученнЫй массив обрабатывает в ПХП и разчленяется на 2 массива с полным совпадением и частичным. к ним применяется сортировка
3)к массивам применяются фильтры по показу (за какое число, месяц и т.п.) + производится поиск контекста (для подсветки)
4)все это добро записывается в сессию и начинается постраничный вывод
Проблемы/Перспективы:
1) запрос дико тормозит систему (загрузка проца сервака под 99%), причем при прямом запросе (т.е. без поиска по отдельному слову - все летает).Также тормоза не по сортировке и записи/считыванию массива в пхп, а именно по поиску... и если учесть что фраза будет скажем из 4,5 слов, то становится страшно...
2) возможно сессия не лучшее место для хранения таких данных, и было б интересней кинуть все это во врем. таблицу, создаваюемую по сессии, но пугают некоторые вещи:
- возможно увеличится время выборки, т.к. сначала придется портировать данные во врем таблицу, а потом изнова из нее считывать
- не понятно каким чертом можно разграничить данные с частичным совпадением и полным по фразе (не делать же 2 отдельных скл запроса? или сортировать массив в пхп а потом вливать Insert-ом в таблицу)
Вопросы:
1) как можно пооптимизировать сей запрос? есть методы и насколько сие поможет?
2) как поступить с временной таблицей? насколько я понимаю, создав п-коннект с базой и прилипив оную она будет существовать до закрытия броузера (на всех стадиях крутится 1 скрип, который вызывает сам себя с параметрами для перелистывания страниц)