2013-07-24 2 views
0

У меня есть 100K-данных в моей базе данных mysql, я хочу найти в нем запрос. Я снял стоп-слова и расщепляется в массив ключевых слов и хранится в переменной т.е. $key[0],$key[1],$key[2] .Я с помощью следующего запросаЛюбой другой метод более быстрого выполнения для этого поискового запроса MYSQL?

SELECT * 
FROM `table` 
WHERE (`column` LIKE '%$key1%' 
    OR `column` LIKE '%$key2%' 
    OR `column` LIKE '%$key3%'); 

любые другие более быстрые способы сделать то же самое.

+0

Вы можете воспользоваться преимуществом для индекса, если вам удастся удалить widlcard (%) от начала строки поиска. –

+0

Вы используете неэффективный способ хранения ключей - лучше хранить ключевые слова в одной таблице и иметь таблицу ссылок, содержащую отношения. Это позволяет вам правильно индексировать вещи, и вам не нужно беспокоиться о том, что столбец ключевого слова исчерпан, потому что кто-то использовал слишком много ключевых слов. – andrewsi

ответ

0

вы можете сделать что-то вроде этого

SELECT * 
FROM table 
WHERE colomn REGEXP '$key1|$key2|$key3' 

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

1

Единственный способ ускорить запросы, подобные этому, - использовать полнотекстовый поиск. LIKE '%string%' не может быть оптимизирован с нормальными индексами, поскольку они используют B-деревья, которые зависят от соответствия префиксу искомой строки. Поскольку ваш шаблон начинается с подстановочного знака, индекс не помогает.

Другим решением является нормализация базы данных. Не помещайте ключевые слова в один столбец, помещайте их в другую таблицу, используя внешний ключ для этой таблицы и строку для каждого ключевого слова FK +. Затем вы можете использовать соединение для соответствия ключевым словам.

Кроме того, вы используете неправильный тип котировок вокруг имен столбцов. Они должны быть обратными, а не одинарными кавычками.

0
  1. Не SELECT *, выберите только то, что вам нужно.
  2. Если вы хотите сделать полный полнотекстовый поиск, теряют % и добавить индекс
  3. опечатка column
+0

Итак, если у вас есть 255 столбцов и вам нужно 254, вы все равно не будете 'SELECT *'? –

+1

Если у вас 255 столбцов, вы делаете что-то неправильно. –

+0

Действительно? Поразмыслить? –

Смежные вопросы