Hangi MySql hattı daha hızlıdır:

3 Cevap php

Ben bir MySql tablodaki bir belge eşleşen bir classified_id değişkeni var.

Şu anda böyle ki bir kayıt hakkında bilgi alma ediyorum:

   SELECT * FROM table WHERE table.classified_id = $classified_id

Bu gibi, örneğin daha hızlı bir yaklaşım olup olmadığını merak ediyorum:

   SELECT 1 FROM table WHERE table.classified_id = $classified_id

Son bir tek o tüm tabloyu taramak zorunda değildir ki ben, tam olarak neye ihtiyacınız olduğunu 1 rekor, ama seçmek yerine 1 sonra kayıtları için arama durur alışkanlık bulundu?

Yoksa bu hayal ediyorum?

Teşekkürler

3 Cevap

Sen bir tablo tarama önlemek için classified_id sütuna bir dizin eklemek gerekir.

CREATE INDEX classified_idx ON table (classified_id);

Neden bunu denemiyorsunuz?

SELECT 1 FROM table;

iadeler

+---+
| 1 |
+---+
| 1 | 
| 1 | 
| 1 | 
| 1 | 
| 1 | 
| 1 | 
+---+
6 rows in set (0.00 sec)

Hesaplanmış bir sütun, (benim test case 6 satırlar için) bu durumda birinin sabit bir değer olan.

Sorunuza

SELECT * FROM table WHERE table.classified_id = $classified_id

bu (tablodaki tüm sütunları ihtiyacı olduğunu varsayarak) veri almak için en hızlı yoludur

Yapabileceğiniz şeyler şu vardır:

  • classified_id üzerinde bir dizin varsa orada ve dizini kullanarak hızlı ise veritabanı tüm tablo tarama dizin kullanmak ve eğer kontrol, bu yüzden size sadece varsa (dizini kullanarak yavaş olabilir istediklerini alırsınız kayıtların oranı yüksek bir kriterlerini karşılamak, ama indeksine sahip veri okuma için herhangi bir ceza getirmek değil bir kaç kayıtları veya veritabanı) geri almak için en iyi yolu seçti
  • Eğer tablodan tüm sütunları ihtiyacınız yoksa o zaman ihtiyacınız hangilerinin tam olarak belirtmek
  • Eğer sadece bir veya sadece birkaç kayıtları almak için SINIRI anahtar sözcüğünü kullanabilirsiniz kriterlerini karşılamak daha sonra bir kayıt varsa

Diğer sonra bu böyle basit bir sorgu için sadece bir sonraki adım (sisteminizde bir seçenek olmayabilir) birçok sabit diskler için tablo bölümü olacaktır.