SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 23.02.2015 17:55:45

mrsol
Участник
Зарегистрирован: 23.03.2010
Сообщений: 12

Неправильно считаются индексы.

В таблице 424932 записи.
Есть поле key уникальный индекс, показывает 424932 записи.
Есть поле crc (crc32(`key`)) просто индекс int(4) unsigned. показывает 424932 записи.

SELECT  `crc` , COUNT(  `crc` ) AS c1
FROM  `addr_zero_1B_12`
WHERE 1
GROUP BY  `crc`
HAVING COUNT(  `crc` ) >1

Выводит 28 записей с кол-вом 2-х совпадений.

Как так получается, что вроде индексов 424932 (пхпмайдамин показывает), а на самом деле должно быть как минимум на 28 записей меньше!
Таблица myisam, mysql-5.5. Таблица оптимизирована.

Неактивен

 

#2 23.02.2015 18:53:23

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Неправильно считаются индексы.

Не знаю, что показывает пхпадмин. Если как вы пишите количество записей, то не понятен ваш запрос. Если речь идет про число различных значений индекса, то эта цифра приблизительна, для обновления статистики выполните ANALYZE TABLE

P.S. Посмотрите ещё эту тему
http://sqlinfo.ru/forum/viewtopic.php?id=4477

Неактивен

 

#3 23.02.2015 19:26:17

mrsol
Участник
Зарегистрирован: 23.03.2010
Сообщений: 12

Re: Неправильно считаются индексы.

ANALYZE TABLE  `addr_zero_1B_12`

Table  Op  Msg_type  Msg_text  
work_addr.addr_zero_1B_12  analyze status  Table is already up to date


SHOW INDEX FROM  `addr_zero_1B_12`

Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
addr_zero_1B_12 0 addr 1 addr A 433067 NULL NULL BTREE
addr_zero_1B_12 1 crc 1 crc A 433067 NULL NULL BTREE
 


select count(`addr`) as c1 from `addr_zero_1B_12` where 1


select count(`addr`) as c1 from `addr_zero_1B_12` where 1 group by `addr` having count(`addr`)=1
Находит уникальных 433067 записей что и есть на самом деле.

select count(`crc`) as c1 from `addr_zero_1B_12` where 1 group by `crc` having count(`crc`)=1
Находит всего 433009 записи. Но в шов индексе написано что уникальных индексов больше!!!

Неактивен

 

#4 23.02.2015 20:55:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Неправильно считаются индексы.

cardinality это по определению оценка количества уникальных значений индекса, т.е. величина не точная.

Cardinality
An estimate of the number of unique values in the index.

Неактивен

 

#5 24.02.2015 13:52:21

mrsol
Участник
Зарегистрирован: 23.03.2010
Сообщений: 12

Re: Неправильно считаются индексы.

Понял. Спасибо.

Неактивен

 

Board footer

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