MySQL'de kardinalite nedir? Lütfen basit, teknik olmayan bir dille açıklayın.
Herhangi bir tablonun dizin ayrıntısı bir alanın önemini group_id
11 olarak gösteriyorsa, bu ne anlama geliyor?
MySQL'de kardinalite nedir? Lütfen basit, teknik olmayan bir dille açıklayın.
Herhangi bir tablonun dizin ayrıntısı bir alanın önemini group_id
11 olarak gösteriyorsa, bu ne anlama geliyor?
Yanıtlar:
Maksimum kardinalite: Tüm değerler benzersizdir
Min kardinalite: Tüm değerler aynıdır
Bazı sütunlara yüksek kardinalite sütunları denir, çünkü her satıra aynı değeri koymanızı engelleyen (benzersiz gibi) yerinde kısıtlamaları vardır.
Kardinalite, verileri kümeleme, sıralama ve arama yeteneğini etkileyen bir özelliktir. Bu nedenle, DB'lerdeki sorgu planlayıcıları için önemli bir ölçümdür, en iyi planları seçmek için kullanabilecekleri bir buluşsal yöntemdir.
Wikipedia, SQL'deki önemliliği şu şekilde özetler :
Gelen SQL (Structured Query Language) terimi önem düzeyi anlamına gelir benzersiz bir belirli bir kolon (özellik) içinde ihtiva edilen veri değerleri veritabanı tablo . Kardinalite ne kadar düşükse, bir sütundaki daha fazla yinelenen öğeler. Bu nedenle, olası en düşük önem düzeyine sahip bir sütun, her satır için aynı değere sahip olacaktır. SQL veritabanları , belirli bir sorgu için en uygun sorgu planını belirlemeye yardımcı olmak için önem düzeyini kullanır .
Dizindeki benzersiz değerlerin sayısının bir tahminidir.
Tek bir birincil anahtar sütunu olan bir tablo için, önem düzeyi normalde tablodaki satır sayısına eşit olmalıdır.
Temelde, Kami tarafından bağlantılı Wikipedia makalesine göre bir sütunun değerlerinin benzersizlik derecesi ile ilişkilidir.
Neden dikkate alınması önemli olduğu, indeksleme stratejisini etkilediğidir. İndeks kullanılacak kadar seçici olmayacağından, yalnızca 2 olası değere sahip düşük bir kardinalite sütununu indeksleyen çok az nokta olacaktır.
Kardinalite ne kadar yüksek olursa, satırların farklılaşması o kadar iyidir. Farklılaşma, veri elde etmek için daha az dalda gezinmeye yardımcı olur.
Bu nedenle daha yüksek kordinalite değerleri şu anlama gelir:
Matematiksel terimlerle, kardinalite, bir değerler kümesindeki değerlerin sayısıdır. Bir küme yalnızca benzersiz değerler içerebilir. Bir örnek "A" kümesi olabilir.
"A" kümesi şöyle olsun: A = {1,2,3} - bu kümenin önemi | 3 |.
"A" kümesi 5 değer A = {10,21,33,42,57} içeriyorsa, kardinalite | 5 | olur.
Mysql bağlamında bunun anlamı, bir tablo sütununun öneminin, o sütunun benzersiz değerlerinin sayısı olmasıdır. Birincil anahtar sütununuzun önemine (örn. Table.id) bakıyorsanız, o sütunun önemi, tablodaki her satır için bir benzersiz kimlik olduğundan, bu tablonun kaç satır içerdiğini size söyleyecektir. Bu masada kaç tane satır olduğunu bulmak için bir "COUNT (*)" işlemi yapmanız gerekmez, kardinaliteye bakın.
Gönderen manuel :
Kardinalite
Dizindeki benzersiz değerlerin sayısının bir tahmini. Bu, ANALYZE TABLE veya myisamchk -a çalıştırılarak güncellenir. Kardinalite, tamsayı olarak saklanan istatistiklere göre sayılır, bu nedenle değer küçük tablolar için bile kesin olmayabilir. Kardinalite ne kadar yüksek olursa, MySQL'in birleştirme yaparken indeksi kullanma şansı o kadar artar.
Ve Percona'dan bir analiz :
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)