2012-05-09 17 views
5

Merak ediyorum, en hızlı (veya veritabanını işlemek için en açık olan)Daha hızlı olan: "SELECT * tablo" veya "SELECT x, y, q FROM tablosu" (4 alanlı bir tablodan)

x, y, q

ne şekilde en hızlı/veritabanı için en kolay (gerçekleştirmek için: sadece 3 ihtiyacım

x, y, z, q:

diyelim, db tablo 4 alana sahiptir PHP kullanarak) "SELECT * from table" veya "SELECT x, y, q FROM table"? Ben hala sadece 3 seçmek için gerekli süre tablo 5 veya daha fazla alan olsaydı

aynı uygulamak istiyorsunuz?

+0

en temel mantıkla düşünün. Farklı çeşitte topları olan bir çantan var. Basketbol ve voleybol oynamak isteyen insanlar var. Sepet topu ve voleybol topunu çıkartabilirsiniz ve gerisini çantada bırakabilirsiniz. Veya alternatif olarak, tüm çantayı boşaltabilir, sepet topunu ve voleybolu toplayabilir ve geri kalanları bırakabilirsiniz. Hangisi daha kolay olurdu? – TheDeadLike

cevap

10

SELECT x,y,z FROM table MySQL sorgusu çalıştırmadan önce tabloda hangi sütun aramak zorunda kalmazsınız çünkü hızlıdır.

+4

Ve eğer bu sütunlar endekslenmişse, masanın kendisinden okumak bile gerekmeyecek ... – eggyal

+0

Tamam. Kafamda bunun yerine belirli varlık (ve bu alanlar için/tür aramak için mysql alma) – mowgli

+2

Hala o x, y, z olduğunu doğrulamak amacıyla sütunları arama gerekecek arasında, MySQL sadece hepsini seçmek için daha kolay görünüyordu bu tablo için geçerli sütunlar. –

3

en veritabanlarında * alanlarını belirterek daha yavaştır.

Onlar çoktur olsa da tüm sütunları yerleştirmek iyi bir programlama uygulamadır. Eğer tüm alanları okumuyorsun ama SELECT x,y,q,z FROM table ve select * bilge aynı etki performansa sahip olacağını belirtmeyi beri

+0

Bu neden iyi bir uygulama? – mowgli

+3

@mowgli Birkaç nedenden dolayı iyi bir uygulamadır. 1) Sorgunun sonuçlarından gerçekte hangi verileri kullandığını daha iyi tanımlar, 2) As 'ın' '' 'tüm sütunların verilerini alır, ileride birileri masaya 200 ekstra sütun eklerse, birdenbire Aktarılan 200 kat fazla veri ile uğraşmak zorundasınız. Bu, ** işinizin sorgunuzla bir ilgisi olmasa bile ** sizin ** performansınızı ** etkileyecektir. Temel olarak, en az erişim veya en az ayrıcalık ilkesidir (http://en.wikipedia.org/wiki/Principle_of_least_privilege) –

3

SELECT x,y,q FROM table daima daha hızlı select * olduğunu.