Задавайте вопросы, мы ответим
Вы не зашли.
ногами не пинайте, если я туплю жестоко.
почитал много чего про индексы, но толком ничего про длину не нашел. везде пишут что экспериментально подбирается.
решил поэкспериментировать над одной колонкой в таблице небольшой (по количеству колонок). в ней примерно 800 тысяч строк. в строке содержится число, но в виде varchar ибо поиск может быть и по части. максимум 3 цифры до точки и две после.
начал с длины индекса в 3 символа. кардиналити получился высокий. выполнил запрос. записал все показатели. сменил длинну на 2. кардиналити резко упал. время запроса выросло. сменил на 4. кардиналити оказался ниже чем у 3, но выше чем у 2. потом сменил на 3 опять и кардиналити был уже в разы меньше чем в первый раз когда я ставил эту длину индексу. да и время запроса увеличилось.
затем я еще несколько раз попробовал поменять длину. результаты всегда ужасно отличались. никакой закономерности выделить не получилось.
вопрос: объясните дураку почему такая фигня и как в данной ситуации всетаки выбрать длинну у индекса?
спасибо
сейчас вот вообще было так: поставил длину 3 - кардиналити 450. поставил 4 - 23496. вернул на место 3 - получил кардиналити 17. ничего не понимаю. что тут еще получается как повезет со звездами при создании индекса?)))
Отредактированно stasuss (03.02.2012 09:55:04)
Неактивен
Хм, а не проще ли хранить число в виде числа, а не в виде строки?
Что касается длины индекса, то можно создать индекс длиной количество символов в varchar - хуже не будет.
Неактивен
ну а все таки почему такая разница в кардиналити? невозможно контролировать полезность индекса при подборе длинны
Неактивен
чем больше длина индекса тем выше кардиналити. Почему разница? Ну если у Вас индекс только на первый символ, то кардиналити не должен быть выше 10 (ибо вариантов всего 10, от символа '0' до символа '9'), если на первые два, то соответственно кардиналити не больше 100. Если Вы ставите индекс на всю длину, то Вы получаете максимальную полезность индекса.
Неактивен
stasuss написал:
сейчас вот вообще было так: поставил длину 3 - кардиналити 450. поставил 4 - 23496. вернул на место 3 - получил кардиналити 17. ничего не понимаю. что тут еще получается как повезет со звездами при создании индекса?)))
А таблица innodb или myisam?
Cardinality - это оценочная величина, статистику можно перестроить с помощью оператора ANALYZE TABLE
Неактивен