我有下表:
CREATE TABLE cities (
city_id INT,
city_name VARCHAR(255),
-- some other columns
PRIMARY KEY (city_id)
) ENGINE=InnoDB
我想为city_name添加一个索引,以便我可以使用LIKE运算符搜索它。如何确定最佳密钥长度?
编辑:此表格将填入美国城市,用例为只读。
答案 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
(专题地名录,人口稠密的地方)