Açıkça bir dizin oluşturmanız gerekiyor mu yoksa birincil anahtarı tanımlarken örtük mü? Cevap MyISAM ve InnoDB için aynı mıdır?
Açıkça bir dizin oluşturmanız gerekiyor mu yoksa birincil anahtarı tanımlarken örtük mü? Cevap MyISAM ve InnoDB için aynı mıdır?
Yanıtlar:
Birincil anahtar her zaman dizine eklenir. Bu MyISAM ve InnoDB için aynıdır ve genellikle endeksleri destekleyen tüm depolama motorları için geçerlidir.
Http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html'ye göre bunun örtük olduğu anlaşılıyor
Bu 2009 yılında sorulmuş olsa da, birincil anahtarlar üzerinde MySQL belgelerine gerçek bir referans yayınlamak düşündüm. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
Birincil anahtar bir tablo için size en hayati sorguları kullandıkları sütun sütun veya kümesini temsil eder. Hızlı sorgu performansı için ilişkili bir dizini vardır
MySQL 5.0 referansı için bakınız: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Çoğu MySQL indeksi ( PRIMARY KEY , UNIQUE, INDEX ve FULLTEXT) B ağaçlarında saklanır. İstisnalar, uzamsal veri türlerindeki dizinlerin R ağaçlarını kullanması ve MEMORY tablolarının karma dizinlerini de desteklemesidir.
Birincil anahtar, hem MyISAM hem de InnoDB için örtük olarak dizine eklenir. Birincil anahtarı kullanan bir sorguda EXPLAIN kullanarak bunu doğrulayabilirsiniz.
Sanırım cevap bu
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
Dizinler en iyi şekilde, yan tümceciklerde ve "sıralama ölçütü" gibi her türlü sıralamada sık kullanılan sütunlarda kullanılır. Daha karmaşık bir veritabanı üzerinde çalışıyor olabilirsiniz, bu nedenle birkaç basit kuralı hatırlamak iyidir.
Endeksler cümleleri ve sıralamayı göre hızlandırır. Tablolarınızı oluştururken verilerinizin NASIL kullanılacağını düşünmeyi unutmayın. Hatırlanması gereken birkaç şey daha var. Tablonuz çok küçükse, yani sadece birkaç çalışan varsa, bir dizini kullanmak, dizini dışarıda bırakmak ve bir tablo taraması yapmasına izin vermekten daha kötüdür.
Dizinler gerçekten yalnızca çok sayıda satırı olan tablolarla kullanışlıdır.
Hatırlanması gereken bir diğer şey, çalışanımızın veritabanının durumundaki bir konudur, sütun değişken bir uzunluksa, dizinlerin (ve MySQL'in çoğunun yanı sıra) çok daha az verimli çalışmasıdır.
Siz de katılmayı unutmayın! Dizine eklenen birleştirme alanları işleri hızlandırır.
Birincil anahtar her zaman otomatik olarak dizine eklenir ve benzersizdir. Bu nedenle, gereksiz dizinler oluşturmamaya dikkat edin.
Örneğin, böyle bir tablo oluşturduysanız
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
Birincil anahtarı dizine eklemek ve üzerinde benzersiz bir kısıtlama uygulamak istediğiniz için, aslında üzerinde üç dizin oluşturursunuz foo
!
Birincil anahtar sütunu, birincil anahtarın getirdiği kısıtlı diğer dizinlenmiş sütunlar olarak düşünebilir.
Kullanım örneklerinin çoğunda hem birincil anahtara hem de dizinlenmiş sütun / sütunlara ihtiyacımız vardır, çünkü tabloya yapılan sorgularımız satırları birincil anahtar olmayan sütun / sütunlara göre filtreleyebilir, bu durumda genellikle bu sütun / sütunları dizine ekleriz de.