Коллеги, DBA. Как узнать распределение значений в столбце согласно индексу?
Дана таблица.
Выполняемый запрос: DELETE FROM history_uint WHERE (clock < '1602720000');
Немного о таблице/столбце:
Cardinality (SHOW INDEXES) ~1.5M уникальных значений
TABLE_ROWS (information_schema) ~1.8М строк всего
Data_length (TABLE STATUS) ~108 Гб данных
Index_length (TABLE STATUS) ~55 Гб размер индекса
При выполнении запроса на очистку мускуль принимает решение не использовать индекс.
EXPLAIN:
mysql> EXPLAIN DELETE FROM history_uint WHERE (clock < '1602720000')\G;
*************************** 1. row ***************************
id: 1
select_type: DELETE
table: history_uint
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1812010879
filtered: 100.00
Extra: Using where
(В принципе, логично, т.к. я ожидаю, что очистится примерно 70% +/- всей таблицы)
Я хочу перестроить индекс (после того как таблица будет почищена - я не тороплюсь).
Но! Чтобы принять решение о будущем типе индекса и его структуре мне нужно знать текущее распределение данных в разрезе индекса. Как его получить?
P.S. Я понимаю, что можно сделать мегаселект и сгруппировать, но есть ли способ прочитать именно данные об индексе - без самих данных.
P.S.S. Данные таблицы:
mysql> SHOW TABLE STATUS WHERE `Name` = "history_uint"\G;
*************************** 1. row ***************************
Name: history_uint
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 1812010879
Avg_row_length: 64
Data_length: 116546568192
Max_data_length: 0
Index_length: 59159265280
Data_free: 6291456
Auto_increment: NULL
...
Check_time: NULL
Collation: utf8_bin
Checksum: NULL
...