2015-05-05 2 views
0

Я очень мало знаю о MySQL. Прямо сейчас у меня есть таблица с около 1 000 000 записей, и я хочу искать определенную строку в определенном столбце и возвращать столбцы.Самый эффективный способ строк MySQL?

Я видел LIKE, но я читал это медленно для таких огромных записей. Я слышал, что Fulltext-Indexing это лучший вариант для поиска.

Я использую phpMyAdmin для просмотра моей базы данных MySQL. Я не знаю, какие точные изменения мне нужно внести в таблицу и какую функцию следует использовать после этого?

PS: Кроме того, можно ли шаблон матч с AGAINST как в LIKE

Спасибо, Сай

+3

* «Я очень мало знаю о MySQL. Сейчас у меня есть таблица с около 1 000 000 записей» * - Так зачем же брать что-то такое же, как миллионный проект? Вид трудно прыгать в глубоком конце, когда вы едва ли умеете плавать ;-) –

+2

и миллион большой? – MatteoSp

+0

ОК, миллион и один; теперь это big -'er ;-) –

ответ

2

Вы можете использовать полнотекстовый индекс для ускорения поиска в таблице. Однако он имеет некоторые ограничения - он работает только на таблицах MyISAM (если вы не используете MySQL 5.6.4 or newer), вам нужно указать его по всем столбцам, которые вы хотите выполнить поиск сразу, и вы можете искать только слова, длина которых больше, чем предел устанавливается глобально для всего сервера базы данных (по умолчанию 4-х символов)

либо использовать PhpMyAdmin для создания индекса, или вы можете сделать это вручную, синтаксис довольно прост:

ALTER TABLE tablename ADD FULLTEXT (column_you_want_to_search); 

или для более столбцов:

ALTER TABLE tablename ADD FULLTEXT (column1, column2, column3); 

Вы можете задать базу данных, которая содержит строки некоторых слов:

SELECT * FROM tablename WHERE MATCH(column_you_want_to_search) AGAINST ('search query') 
SELECT * FROM tablename WHERE MATCH(column1, column2, column3) AGAINST ('another query') 

Существует также возможность поиска в «булевом режиме», где вы можете указать, какие слова вы хотите, не хотите или использовать звездочку как подстановочные знаки. См. this MySQL reference для получения дополнительной информации.

+0

Спасибо, это похоже на то, что я искал. Любая идея, сколько времени займет список с 10 миллионами записей для поиска? –

+0

Говорить, что «это работает только на MyISAM», является ложным, когда вы указываете. Если люди используют исторические версии MySQL, это их проблема. 5.6.4 вышел в 2011 году, в конце концов. – tadman

+0

@ tadman Я согласен, однако, я думаю, что все еще очень важно отметить. Сай (или какой-нибудь другой читатель, который мог бы ответить на этот вопрос в Google) мог запустить более старую MySQL, и он был бы смущен, почему он не работает. –