Какова мощность в MySQL? Пожалуйста, объясните на простом, нетехническом языке.
Если индексная деталь любой таблицы отображает мощность поля, скажем group_id
как 11, то что это значит?
Какова мощность в MySQL? Пожалуйста, объясните на простом, нетехническом языке.
Если индексная деталь любой таблицы отображает мощность поля, скажем group_id
как 11, то что это значит?
Макс. мощность: все значения уникальны
Минимальная мощность: все значения одинаковы
Некоторые столбцы называются столбцами с высокой степенью мощности, поскольку они содержат ограничения (например, уникальные), запрещающие вам вводить одинаковое значение в каждую строку.
Кардинальность - это свойство, которое влияет на способность группировать, сортировать и искать данные. Поэтому это важное измерение для планировщиков запросов в БД, это эвристика, которую они могут использовать для выбора лучших планов.
Википедия суммирует мощность в SQL следующим образом:
В SQL (язык структурированных запросов) термин мощность относится к uniqueness значений данных, содержащихся в определенном столбце (атрибуте) database table. Чем меньше мощность, тем больше дублируются элементы в столбце. Таким образом, столбец с наименьшей возможной мощностью будет иметь одинаковое значение для каждой строки. Базы данных SQL используют мощность, чтобы помочь определить оптимальный план запроса для заданного запроса.
Это оценка количества уникальных значений в индексе.
Для таблицы с одним столбцом первичного ключа мощность обычно должна быть равна количеству строк в таблице.
В основном это связано со степенью уникальности значений столбца в соответствии со статьей Википедии, связанной с Ками.
Почему важно учитывать, что он влияет на стратегию индексирования. Индексирование столбца с низкой мощностью будет минимальным, и только 2 возможных значения будут индексироваться, поскольку индекс не будет достаточно избирательным, чтобы его можно было использовать.
Чем выше мощность, тем лучше дифференциация строк. Дифференциация помогает перемещаться по нескольким отраслям для получения данных.
Поэтому более высокие значения сердечности означают:
В математических терминах мощность - это счетчик значений в наборе значений. Набор может содержать только уникальные значения. Примером может служить набор "A" .
Пусть множество "A" будет: A = {1,2,3} - мощность этого множества равна | 3 |.
Если значение "A" содержит 5 значений A = {10,21,33,42,57}, то мощность равна | 5 |.
Что это означает в контексте mysql, так это то, что мощность столбца таблицы - это количество уникальных значений этого столбца. Если вы посмотрите на мощность вашего столбца первичного ключа (например, table.id), то мощность этого столбца покажет вам, сколько строк содержит эта таблица, так как для каждой строки таблицы есть один уникальный идентификатор. Вам не нужно выполнять "COUNT (*)" в этой таблице, чтобы узнать, сколько строк у него есть, просто посмотрите на мощность.
Простым способом является количество строк или кортежей в таблице. Количество столбцов называется "степенью"
Из руководство:
Cardinality
Оценка количества уникальных значений в индексе. Это обновляется путем запуска ANALYZE TABLE или myisamchk -a. Мощность рассчитывается на основе статистики, хранящейся в виде целых чисел, поэтому значение не обязательно точные даже для небольших таблиц. Чем выше мощность, тем больше вероятность того, что MySQL использует индекс при выполнении объединений.
И анализ из Percona:
CREATE TABLE `antest` (
`i` int(10) unsigned NOT NULL,
`c` char(80) default NULL,
KEY `i` (`i`),
KEY `c` (`c`,`i`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
mysql> select count(distinct c) from antest;
+-------------------+
| count(distinct c) |
+-------------------+
| 101 |
+-------------------+
1 row in set (0.36 sec)
mysql> select count(distinct i) from antest;
+-------------------+
| count(distinct i) |
+-------------------+
| 101 |
+-------------------+
1 row in set (0.20 sec)
mysql> select count(distinct i,c) from antest;
+---------------------+
| count(distinct i,c) |
+---------------------+
| 10201 |
+---------------------+
1 row in set (0.43 sec)
mysql> show index from antest;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| antest | 1 | i | 1 | i | A | NULL | NULL | NULL | | BTREE | |
| antest | 1 | c | 1 | c | A | NULL | NULL | NULL | YES | BTREE | |
| antest | 1 | c | 2 | i | A | NULL | NULL | NULL | | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.00 sec)
mysql> analyze table sys_users;
+--------------------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------------+---------+----------+----------+
| antest | analyze | status | OK |
+--------------------------------+---------+----------+----------+
1 row in set (0.01 sec)
mysql> show index from antest;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| antest | 1 | i | 1 | i | A | 101 | NULL | NULL | | BTREE | |
| antest | 1 | c | 1 | c | A | 101 | NULL | NULL | YES | BTREE | |
| antest | 1 | c | 2 | i | A | 10240 | NULL | NULL | | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set (0.01 sec)