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. INSERT
Masada 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 NUMBER
Sözdizimi oldukça yatkın hatadır.
SELECT *
sütun dizini eklendiğinde, ORDER BY
hangi 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
id
ilk satırı bulmak için birincil anahtar dizinini kullanır . İkincisi, (endekslenmemiş)val
sütunundaki sonucun tamamını sıralamalıdır .