Space
Новичок
Оптимизация запроса
поиск по сайту с использованием hash-словаря
итак, есть запрос:
SELECT
dr.region_id,
dt.threed_id,
d.id,
d.title,
COUNT(l.data_id) as found_sum_words,
COUNT(DISTINCT l.word_id) as found_sum_unic_words,
SUM(l.place)/4 AS found_avg_place
FROM b_dict_word as w
LEFT JOIN b_dict_link as l ON (l.word_id=w.id)
LEFT JOIN b_data as d ON (d.id=l.data_id)
LEFT JOIN b_data_threed as dt ON (d.id=dt.data_id)
LEFT JOIN b_data_region as dr ON (d.id=dr.data_id)
WHERE
((w.hash='6134e0734f70d213203ad574b08bd9d1' and w.len='11') or (w.hash='16082c5badb076d702dff1e19ba26fd0' and w.len='9'))
GROUP BY l.data_id
HAVING found_sum_unic_words>='2'
ORDER BY found_sum_unic_words DESC, found_sum_words DESC, found_avg_place ASC
объясняю суть действия:
1. есть таблица-словарь слов b_dict_word, где есть слово в MD5 (w.hash) и его длина (w.len)
2. есть таблица поясняющая b_dict_link поясняющая в каком тексте какое слово находится LEFT JOIN b_data as d ON (d.id=l.data_id)
суть проблемы - долго исполняется запрос. хостер жалуется.
теперь о принципе действия:
надо выбрать записи в которых встречается хотя бы половина из искомых слов и отсортировать по:
found_sum_unic_words - кол-ву уникальных слов встречающихся в тексте
found_sum_words - количеству искомых слов --//--
found_avg_place - средняя позиция искомых слов от начала текста.
простейший поисковый алгоритм.
используемая база - mysql. постгрес и хранимые процедуры не предлагать. хостер не хотит
За ранее благодарен!
поиск по сайту с использованием hash-словаря
итак, есть запрос:
SELECT
dr.region_id,
dt.threed_id,
d.id,
d.title,
COUNT(l.data_id) as found_sum_words,
COUNT(DISTINCT l.word_id) as found_sum_unic_words,
SUM(l.place)/4 AS found_avg_place
FROM b_dict_word as w
LEFT JOIN b_dict_link as l ON (l.word_id=w.id)
LEFT JOIN b_data as d ON (d.id=l.data_id)
LEFT JOIN b_data_threed as dt ON (d.id=dt.data_id)
LEFT JOIN b_data_region as dr ON (d.id=dr.data_id)
WHERE
((w.hash='6134e0734f70d213203ad574b08bd9d1' and w.len='11') or (w.hash='16082c5badb076d702dff1e19ba26fd0' and w.len='9'))
GROUP BY l.data_id
HAVING found_sum_unic_words>='2'
ORDER BY found_sum_unic_words DESC, found_sum_words DESC, found_avg_place ASC
объясняю суть действия:
1. есть таблица-словарь слов b_dict_word, где есть слово в MD5 (w.hash) и его длина (w.len)
2. есть таблица поясняющая b_dict_link поясняющая в каком тексте какое слово находится LEFT JOIN b_data as d ON (d.id=l.data_id)
суть проблемы - долго исполняется запрос. хостер жалуется.
теперь о принципе действия:
надо выбрать записи в которых встречается хотя бы половина из искомых слов и отсортировать по:
found_sum_unic_words - кол-ву уникальных слов встречающихся в тексте
found_sum_words - количеству искомых слов --//--
found_avg_place - средняя позиция искомых слов от начала текста.
простейший поисковый алгоритм.
используемая база - mysql. постгрес и хранимые процедуры не предлагать. хостер не хотит
За ранее благодарен!