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

は6も "key_lenに" ではないでしょうか?

+0

この列の文字セットとは何ですか?それはUTF-8ですか? –

+0

はい、それはutf8です – Yev

答えて

1

文字セットによって異なります。たとえば、utf8を使用している場合、6 * 3 = 18 ...と思って、2バイトがどこから来たのかわからない

+0

n00bのように聞こえて申し訳ありませんが、照合と同じ文字セットですか?列照合は "utf8_unicode_ci"です。 – Yev

+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 –

+0

ありがとうございました!そのutf8のように見えます。これは何とか余分な2バイトを説明していますか?また、可能な重複に基づいてインデックスを短縮するという点で、インデックスがどのように機能するかを正しく理解していますか?これはベストプラクティスですか? – Yev

関連する問題