Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: оптимизация fulltext поиска
 
 автор: sord   (22.07.2006 в 19:10)   письмо автору
 
 

Просьба помочь с оптимизацией. Запрос на таблицах, в каждой из которых по миллиону записей выполняется 2-12 сек. Необходимо уменьшить это время до < 1 сек. Спасибо.

mysql 4.0.22

SELECT DISTINCT
(table.tid) AS tid ,
(MATCH(table.name) AGAINST ('word')
+MATCH(table.descr) AGAINST ('word')
+MATCH(table.owner) AGAINST('word')) AS relevance
FROM table, price
WHERE price.tid=table.tid
AND price.quantity=1
AND price.vid = 0
AND (MATCH(table.name) AGAINST ('word')
OR MATCH(table.descr) AGAINST ('word')
OR MATCH(table.owner) AGAINST('word'))
AND table.exists='Y'
GROUP BY table.tid
ORDER BY relevance DESC, table.avail DESC
limit 150

CREATE TABLE 'price' (
'pid' int(11) NOT NULL auto_increment,
'tid' int(11) NOT NULL default '0',
'quantity' int(11) NOT NULL default '0',
'vid' int(11) NOT NULL default '0',
PRIMARY KEY ('pid'),
UNIQUE KEY 'tid' ('tid','vid'),
KEY 'vid' ('vid'),
KEY 'tvq' ('tid','vid','quantity'),
) TYPE=MyISAM;

CREATE TABLE 'table' (
'tid' int(11) NOT NULL auto_increment,
'name' varchar(255) NOT NULL default '',
'descr' text NOT NULL,
'avail' int(11) NOT NULL default '0',
'exists' char(1) NOT NULL default 'Y',
'owner' varchar(255) NOT NULL default '',
PRIMARY KEY ('tid'),
KEY 'name' ('name'),
KEY 'avail' ('avail'),
KEY 'et' ('exists','tid'),
KEY 'eta' ('exists','tid','avail'),
KEY 'owner' ('owner'),
FULLTEXT KEY 'ft_name' ('name'),
FULLTEXT KEY 'ft_descr' ('descr'),
FULLTEXT KEY 'ft_owner' ('owner')
) TYPE=MyISAM;

   
 
 автор: cheops   (22.07.2006 в 21:54)   письмо автору
 
   для: sord   (22.07.2006 в 19:10)
 

Приведите ещё запрос. Работа происходит на локальной машине или не сервере, который вы не можете настраивать?

   
 
 автор: sord   (23.07.2006 в 14:27)   письмо автору
 
   для: cheops   (22.07.2006 в 21:54)
 

остальные запросы не используют fulltext индексы, и с ними проблем нет, в основном это запросы типа SELECT * FROM table WHERE pid IN (...). Работа на удаленном MySQL-сервере, но настраивать, с некоторыми ограничениями, я его могу. Ограничения - ап/даун-грейд сервера делать не могу.

   
 
 автор: cheops   (23.07.2006 в 16:06)   письмо автору
 
   для: sord   (23.07.2006 в 14:27)
 

Погодите, а почему IN? Вы MATCH не используете? Если нет, тогда у вас FULLTEXT индексы получаются не задействованы...

   
 
 автор: sord   (23.07.2006 в 20:07)   письмо автору
 
   для: cheops   (23.07.2006 в 16:06)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования