2012-01-11 4 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) - Key

Правильно ли я делаю это?

Когда я попытался запустить

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

+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