MySQL endeksleri ve işlevselliği ile ilgili bir soru

5 Cevap php

Ben bu yüzden gibi benim db sıradan bir tablo var demek

----------------------------
| id | username | password |
----------------------------
| 24 | blah     | blah     |
----------------------------

Birincil anahtar id sütuna atanır. Şimdi ben böyle bir MySQL sorgu çalıştırdığınızda:

SELECT id FROM table WHERE username = 'blah' LIMIT 1

Bu birincil anahtar dizini bile yardımcı olur mu? Ben adlarını maç için bunu söylüyorum, o kullanıcı adı sütunu yerine endeksli olmamalı?

Zaman ayırdığınız için teşekkürler

5 Cevap

Eğer bir dizin oluşturduğunuzda, genel olarak, sorgulanan olacak ne beklentiye dayanarak bunu. Yani, her zaman ya da sık sık, kullanıcı adı sorgu, daha sonra adı bir dizin oluşturmanız gerekir olacağını önceden bilmek durumunda. Diğer tablolardan bir tanımlayıcı veya yabancı anahtar olarak id sütunu kullanıyorsanız, o zaman kimliği sütun üzerinde bir dizin oluşturun.

Sorunuzu doğrudan cevaplamak için - Evet, adı sorgulamak, dizin adı üzerinde olmalı, ve id sorgulamak asla eğer.

Hayır bu durumda birincil anahtar dizini yardımcı olmaz. Ancak, pek çok diğer durumlar için yararlıdır. Böyle adı alanına bir ikincil dizin ekleyebilirsiniz:

alter table mytable add index (username);

Genellikle bir tamsayı alanı eklemek ve herhangi bir tabloya birincil anahtar olarak atamak için neden böylece alan diğer tablolardaki yabancı anahtar olarak kullanılıyor olabilir.

Bu sorguda da yardımcı olmayacaktır. Adı üzerinde bir indeks bu bir yardımcı olacaktır.

Ama indeksi anlamlı Wheres hızlandırmak ve kimliği üzerinde katılır olacaktır.

Siz haklısınız. Endeksleme sadece bir arama olduğunda, performansı artırır katılır veya sütun üzerinde toplama işlevi.

Hayır, bu durumda değil.

Eğer sorguya "İZAH" çalıştırırsanız, bunu kullanılan olmaz görürsünüz.

EXPLAIN SELECT id FROM table WHERE username = 'blah' LIMIT 1;

Hangi dizin varsa, kullanılacak gibi sizin sorgu bağlıdır. Adı üzerinde bir dizin olasılıkla sorgu hızlandırmak olacaktır.