2012-01-11 95 views
0

我有一张约1000个城市的表格。有时,我需要按城市名称进行搜索,因此决定将其作为索引。决定指数长度的最佳做法是什么? 6似乎是最佳选择,因为几乎没有重复。城市名称字段的索引长度

示例表:

cityID | cityName   | countyID 
    1 | Bethlehem  |  30 
    2 | Blairstown  |  38 
    3 | Bloomfield  |  32 
    4 | Bloomingdale  |  34 
    5 | Bloomsbury  |  30 
    6 | Bogota   |  31 
    7 | Boonton   |  33 
    8 | Botsford   |  44 
    9 | Bound Brook  |  35 
    10 | Branchburg  |  35 
    11 | Branchville  |  36 
    12 | Brantwood  |  32 
    13 | Briarcliff Manor |  25 

cityID - 主键

countyID - 关键

的cityName(6) - 关键

我在做对吗?

当我试图运行

EXPLAIN SELECT * 
FROM 'CITIES' 
WHERE 'cityName' = 'Branchburg' 

我得到以下结果:

id: 1 
select_type: SIMPLE 
table: CITIES 
type: ref 
possible_keys: cityName 
key: cityName 
key_len: 20 
ref: const 
rows: 2 
Extra: Using where 

不应该 “key_len” 是6?

+0

什么是列的字符集?它是UTF-8吗? – 2012-01-11 22:56:23

+0

是的,它是utf8 – Yev 2012-01-11 23:19:06

回答

1

这取决于字符集。例如,如果你使用的是utf8,它就像6 * 3 = 18 ...我想我不确定哪里有2个字节来自

+0

对不起,听起来像一个n00b,但字符集与排序相同?列整理是“utf8_unicode_ci”。 – Yev 2012-01-11 23:07:22

+0

查看字符集与排序规则之间的差异:http://dev.mysql.com/doc/refman/5.0/en/charset-database.html并找出您的字符集,请看这里:https: //wincent.com/wiki/Finding_out_the_encoding_of_a_MySQL_database – 2012-01-11 23:09:54

+0

谢谢!看起来像它的utf8。这是否以某种方式解释额外的2个字节?另外,我是否正确理解索引是如何根据可能的重复缩短的?这是最佳做法吗? – Yev 2012-01-11 23:18:32

相关问题