พิจารณาตารางค่าและแฮชเช่น:
+------------+----------+------+-----+---------+----------------+
| 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 | |
+------------+----------+------+-----+---------+----------------+
แบบสอบถามต่อไปนี้เสร็จสิ้นใน 0.00 วินาที:
SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
อย่างไรก็ตามการสืบค้นนี้ใช้เวลา 3 นาที 17 วินาที:
SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1;
Sorting resultผมเห็นว่าในขณะที่แบบสอบถามจะทำงานแสดงรายการกระบวนการว่ามันเป็นสถานะ สถานการณ์สามารถทำซ้ำได้อย่างสมบูรณ์ โปรดทราบว่ามีกระบวนการอื่นที่ดำเนินการINSERTการดำเนินการบนตารางอย่างต่อเนื่อง
เหตุใดข้อความค้นหาที่เจาะจงมากขึ้นจึงใช้เวลานานกว่า*แบบสอบถาม ฉันเชื่อเสมอว่า*ควรหลีกเลี่ยงการค้นหาโดยเฉพาะด้วยเหตุผลด้านประสิทธิภาพ
ORDER BY NUMBERไวยากรณ์ค่อนข้างผิดพลาดง่าย
SELECT *รวมกับดัชนีคอลัมน์ในORDER BYนั้นทำให้สับสนคอลัมน์ที่จะถูกจัดเรียง - อีกเหตุผลหนึ่งที่จะหลีกเลี่ยง*s ...
*ไม่ชัดเจน ดังนั้นการพูดว่า "ให้คอลัมน์ทั้งหมดกับฉันและจัดเรียงตามลำดับที่สาม" เป็นเรื่องเกี่ยวกับการกำหนดว่า "ไปที่ซุปเปอร์มาร์เก็ตแล้วบอกฉันว่าคุณผ่านสัญญาณไฟจราจรกี่ครั้ง"
idการค้นหาแถวแรก รายการที่สองต้องเรียงลำดับผลลัพธ์ที่สมบูรณ์ในvalคอลัมน์(ยกเลิกการทำดัชนี)