У меня есть MyISAM MySQL таблица с:
CREATE TABLE IF NOT EXISTS `songs` (
`rid` int(11) NOT NULL auto_increment,
`aid` int(11) NOT NULL,
`song_title` varchar(256) NOT NULL,
`download_url` varchar(256) NOT NULL,
PRIMARY KEY (`rid`),
UNIQUE KEY `download_url` (`download_url`),
KEY `song_title` (`song_title`),
FULLTEXT KEY `song_title_2` (`song_title`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
В нем около 14 миллионов строк. Я впервые обращаюсь с такой большой базой данных, и я не особо заботился об оптимизации раньше. Я пробовал разные вещи, чтобы проверить скорость и точность.
1) Полный текст
select song_title from songs
where match (song_title) againt ('search term') limit 0, 50
-- This gives me very unreliable results but speed is good.
2) НРАВИТСЯ
select song_title from songs
where song_title LIKE '%search term%' limit 0, 50
-- Moderate matching results, speed is good when the query is
-- easily able to fetch the first 50 results... but when i
-- search for a term that does not exist then... here is the result..
-- MySQL returned an empty result set (i.e. zero rows). ( Query took 107.1371 sec )
3) Несколько LIKE
select song_title from songs
where song_title like '%word_1%' and
song_title like '%word_2%' and
song_title like '%word_3%' and
song_title like '%word_N%' LIMIT 0, 50;
-- It takes about 0.2 seconds when the search terms are easily found.
-- Ran this exact above query just now to find the execution time when
-- no results are found.
-- MySQL returned an empty result set (i.e. zero rows). ( Query took 30.8625 sec )
Что мне нужно, так это советы и предложения по оптимизации базы данных / запросов относительно скорости и точности.
Я не могу использовать другую поисковую систему, такую как sphinx, так как у меня нет доступа за пределами корня сайта и я не могу попросить парней, управляющих сервером, настроить его.