2011-02-06 20 views
6

Bir sütun int türünde ise, select sorgu çalıştırmayı daha hızlı yapmak için dizine eklenmesi gerekiyor mu?mysql dizini

cevap

3

Muhtemelen evet,

  • sürece tablo vardır çok az satır (< 1000)
  • int sütun tablo büyük bir kısmı iade ediliyor
  • zayıf seçicilik vardır (diyelim>% 1

Bu durumda, bir tablo taraması yine de daha mantıklı olabilir ve iyileştirici bunu yapmayı seçebilir. Çoğu durumda bir endekse sahip olmak çok zararlı değildir, ancak kesinlikle deneyin ve görmelisiniz (laboratuvarınızda, üretim benzeri bir veri setiyle üretim kalitesinde donanımlarda)

2

Evet öyle. Bir sütunun hangi veri türüne sahip olduğu önemli değildir. Bir dizin belirtmezseniz, mysql, bu sütunda bir değer ararken istediğiniz zaman tüm tabloyu taramak zorundadır.

+0

Belki de şu ana kadar booleanda değilsiniz. bilgili. Örneğin. Şunlara bakın: http://stackoverflow.com/questions/10524651/is-there-any-performance-gain-in-indexing-a-boolean-field – dennis

4

Evet, herhangi bir sütundaki bir dizin, veri türünden bağımsız olarak sorguyu daha hızlı gerçekleştirebilir. Verilerin kendisi önemli olan şeydir - sistemde halihazırda sadece iki değer varsa bir endeks kullanılmasında bir nokta yoktur. Tablo istatistiklerini geçerli olması gerekiyor, ama gerçekten sorguya bağlı -

  • bir dizin varlığı kullanılacağı temin etmez:

    Ayrıca unutmayın.

  • MySQL ayrıca her SELECT için yalnızca bir indekse izin verir ve endeksler için sınırlı bir alana sahiptir (limit dependent on engine).
+0

+1: Ek bilgi :) – shamittomar

+0

"MySQL ayrıca bir dizine de izin veriyor SELECT başına ve dizinler için sınırlı bir alan var "- Hayır ?! (Ya da sadece sizi yanlış anladım. Bunu belirten bir belge alıntılamak ister misiniz?) – yankee

+0

@yankee: EXPLAIN planını görüntülediğinizde, MySQL sadece EXPLAIN öğesinin gördüğü her ifade için bir indeks kullanabilir. Örneğin bir alt sorgu ayrı bir SELECT olacaktır. –

0

Evet, dizinler üzerindeki tüm nokta, bunları primary key aracılığıyla oluşturmanız veya dizin kılavuzunu ekleyerek oluşturmanızdır. Sütunun türü, sorgu hızıyla ilgili bir şey söylemez.

0

Evet, dizine eklenmelidir. Boolean olarak kullanıldıklarında, tinyint sütunlarını endekslemek mantıklı değildir, çünkü bu dizin yeterince seçici olmayacaktır.