Оптимальная длина ключа для столбца varchar в MySQL InnoDB - PullRequest
2 голосов
/ 19 июля 2011

У меня есть следующая таблица:

CREATE TABLE cities (
city_id INT,
city_name VARCHAR(255),
-- some other columns
PRIMARY KEY (city_id)
) ENGINE=InnoDB

Я хочу добавить индекс для city_name, чтобы я мог искать по нему с помощью оператора LIKE.Как определить оптимальную длину ключа?

РЕДАКТИРОВАТЬ: эта таблица будет заполнена городами США, и случай использования только для чтения.

1 Ответ

1 голос
/ 19 июля 2011

Вы хотите, чтобы длина ключа была достаточно широкой, чтобы большинство случаев были уникальными и не шире. Если у вас есть данные, посмотрите, сколько символов должно быть в ширине ключа, чтобы почти все города могли быть представлены в виде отдельных строк на выбранной ширине. Если у вас нет существующих данных, Google список городов для интересующей вас географии (например, США, весь мир) и использовать его в качестве руководства.

Например, если ширина вашей клавиши составляет всего 5 символов, такие города, как

Saint Louis
Saint Petersberg

в ключе будет обозначаться как «Святой», в результате чего ключ будет менее чем совершенным дискриминатором.

Если бы рассматривался целый набор городов, длина ключа 7 была бы идеальной. Ваши ключи будут

Saint L
Saint P

Вот справочная страница MySQL, которая охватывает это:

http://dev.mysql.com/doc/refman/5.6/en/create-index.html

Поиск текста CREATE INDEX part_of_name ON customer (name(10));

Для списка городов, если вы хотите просто рассмотреть самые густонаселенные города:

http://en.wikipedia.org/wiki/List_of_United_States_cities_by_population

Для полного списка:

http://geonames.usgs.gov/domestic/download_data.htm

(тематические газеты, населенные пункты)

...