Bunun gibi değerler ve kareler tablosunu göz önünde bulundurun:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| val | char(9) | NO | | NULL | |
| val_hashed | char(50) | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
Aşağıdaki sorgu 0.00 saniye içinde bitiyor:
SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
Ancak, bu sorgu 3 dakika 17 saniye sürer:
SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1;
Sorgu çalışırken işlem listesinin durum olarak gösterildiğini görüyorum Sorting result. Durum tamamen tekrarlanabilir. INSERTMasada sürekli işlem yapan başka bir işlem olduğunu unutmayın .
Neden daha spesifik olan sorgunun sorgundan daha uzun sürmesi gerekiyor *? *Sorguların özellikle performans nedeniyle kaçınılması gerektiğine her zaman inandım .
ORDER BY NUMBERSözdizimi oldukça yatkın hatadır.
SELECT *sütun dizini eklendiğinde, ORDER BYhangi sütunun sıralandığını engelliyor - *s'den kaçınmak için başka bir neden ...
*Açıkça değil demek istiyorum . Yani şeklindeki deterministik olarak "süpermarkete gidip birçok trafik geçirilen ışıklar nasıl söyle" hakkındadır "üçte bir oranında sıralama bana tüm sütunları verip" diyerek
idilk satırı bulmak için birincil anahtar dizinini kullanır . İkincisi, (endekslenmemiş)valsütunundaki sonucun tamamını sıralamalıdır .