вопрос индексации mysql - PullRequest
2 голосов
/ 22 июня 2011

У меня есть вопрос "передового опыта", касающийся индексации.

Я должен индексировать телефонные номера, которые я обычно форматирую column для целого числа.Я мог бы разделить число на несколько столбцов: areacode, суффикс, префикс, код страны.Но так как мне приходится учитывать международные номера, а в некоторых странах цифры выглядят довольно забавно, я предпочитаю сохранять один столбец.

Поэтому мой вопрос, должен ли я сохранять данные столбца для целых чисел, символов,или varchars?Я убираю все, что не связано с int, поэтому, вероятно, varchar не нужен.

Я должен предоставить своим клиентам возможность поиска, поэтому мне нужно проиндексировать номер.Если бы все телефонные номера были из США, то я бы выделил столбцы, но я угождаю и международным.

Так что мне любопытно, что касается индексации и практики других людей в этой области.арена.Лучше ли индексировать целыми числами (для чего-то подобного), или это даже имеет значение.

В качестве примечания, телефонные номера не будут иметь одинаковую длину.Вот почему я спрашиваю о форматировании структуры столбцов в char или varchar.

спасибо, ребята!

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Насколько большим должен быть стол?Причина, по которой я спрашиваю, заключается в том, что индексы в целых числах будут, очевидно, меньше, но для небольших таблиц это не главное.Использование varchar дает вам больше гибкости для таких вещей, как "... WHERE номер телефона, например," 415% "и т. Д., За счет большего индекса. Если таблица довольно большая, и окно, на котором она работает, находится на всех уровнях памяти.Если вы ограничены, вы можете столкнуться с ситуацией, когда ваш индекс не помещается в память, посылая запросы к этому индексу в ад свопинга. Это может усугубиться выбранным вами механизмом хранения: InnoDB префиксует каждый индекс первичным ключом, напримеркоторый может раздуть ваши индексы, если ваш ПК находится в широком поле или полях.

1 голос
/ 22 июня 2011

Номера телефонов могут включать # и *, поэтому я бы не рекомендовал использовать целые числа.
Также международный префикс + предназначен для поддержки международных префиксов независимо от страны, в которой вы находитесь.

например. в Южной Африке необходимо добавить код страны к 09; в Европе префикс - 00.
Чтобы номера работали везде, вы заменяете международный префикс на +, а ваш мобильный телефон заменит его местным префиксом для набора номера за границей.

Я бы использовал varchar для телефонных номеров.

Кроме того, я бы использовал целое число auto_increment в качестве первичного ключа и номер телефона в качестве вторичного ключа, чтобы сохранить производительность на InnoDB snappy.
Также помните, что люди могут «делиться» номером телефона, поэтому он не может быть уникальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...