MySQL InnoDB中varchar列的最佳密钥长度

时间:2011-07-19 00:30:06

标签: mysql optimization key varchar

我有下表:

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

我想为city_name添加一个索引,以便我可以使用LIKE运算符搜索它。如何确定最佳密钥长度?

编辑:此表格将填入美国城市,用例为只读。

1 个答案:

答案 0 :(得分:1)

您希望密钥长度足够宽,以便大多数情况都是唯一且不会更宽。如果您有现有数据,请查看该键的宽度应该是多少,以便几乎所有城市都可以表示为所选宽度的不同字符串。如果您没有现有数据,请在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

(专题地名录,人口稠密的地方)