2012-01-11 90 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

相關問題