производительность MySQL - PullRequest
0 голосов
/ 18 мая 2009

Мы разрабатываем нашу базу данных в MySql с движком innoDB. База данных содержит столбец типа varchar, в котором каждая запись содержит около 3000 символов. Мы должны обеспечить поиск по этой колонке. Для ускорения нам нужно добавить индекс для этого столбца. Можете ли вы внести некоторую информацию по этому поводу?

Какой тип индекса нам нужно добавить, чтобы ускорить поиск? Нужно ли нам позаботиться об этом для улучшения производительности?

Ответы [ 2 ]

3 голосов
/ 18 мая 2009

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

SELECT * from cars WHERE car LIKE '%{search_str}%'

Тогда я боюсь, что даже если вы добавите ключ в столбец car, mysql все равно придется выполнить полное сканирование, и ваш запрос потенциально может быть очень медленным.

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

1 голос
/ 18 мая 2009

Как говорит ducky, если вы собираетесь запрашивать столбец с помощью SQL LIKE, ваш запрос будет очень медленным, независимо от того, какой индекс вы указали для столбца.

Есть 2 варианта:

  • Переключитесь на базу данных MyIsam вместо InnoDB и используйте полнотекстовый поиск по этому столбцу. Это делается путем размещения полнотекстового индекса на столбце. Дополнительная информация.
  • Используйте такой инструмент, как Lucene, для полнотекстового поиска
...