SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.05.2011 14:48:11

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Уникальные значения многостолбцовых индексов

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

Например, при наличии KEY (`field1`, `field2`, `field3`) в пустой таблице и занесении данных, получем цифры 0, 0, ХХ соответственно. Естественно, OPTIMIZE TABLE решает вопрос, но не оптимизоровать же таблицу после каждой вставки.

Почему так происходит? Можно ли побороть?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#2 26.05.2011 00:39:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Уникальные значения многостолбцовых индексов

Если честно, не понял, что Вы делаете, и что Вас смущает. Если Вы вставляете
строки с одинаковыми field1 и field2 (почти) всегда, имеет смысл field3 поставить
в начало для лучшей селективности.

Неактивен

 

#3 26.05.2011 09:06:59

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения многостолбцовых индексов

Порядок следования полей зависит от выборок, менять его не есть хорошо, первые 2 поля используются на много чаще, чем последнее smile

Вообще речь идёт о Cardinality полей составного индекса, пардон за незнание терминов)) Как-то оно не стабильно изменяется... От чего это зависит?
Я так понимаю, Cardinality влияет на работу селектов в первую очередь, потому и задался вопросом.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#4 26.05.2011 09:20:16

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Уникальные значения многостолбцовых индексов

Cardinality влияет на то, какой индекс будет выбран при SELECT или будет использован full table scan. Если таблица мало наполненная, то это все равно. Если много записей, то скорее всего оценка будет нормальной. Используйте USE INDEX и FORCE INDEX если судя по EXPLAIN выбирается не тот индекс, который нужен. На алгоритмы построения дерева и подсчета статистики вряд ли удастся повлиять.

Неактивен

 

#5 26.05.2011 09:30:30

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения многостолбцовых индексов

Повлиять на алгоритмы, допустим, не удастся, но какая их закономерность? Я конечно не следил как часто не изменяется Cardinality, но при заливе данных в пустую таблицу много где Cardinality осаётся нулевым. Изменятся ли эти нули когда-нибудь вообще? smile Вот по этому поводу есть какая-то информация? Или всё же целесообразно периодически делать оптимизацию таких таблиц?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#6 26.05.2011 09:46:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Уникальные значения многостолбцовых индексов

Какая закономерность можно узнать, посмотрев в исходники MySQL. Если при заливке данных cardinality остается нулевой, то это можно классифицировать как багу и запостить на bugs.mysql.com

Неактивен

 

#7 26.05.2011 10:20:01

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения многостолбцовых индексов

Во блин, значит не всё так просто, как хотелось бы))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson