พิจารณาตารางค่าและแฮชเช่น:
+------------+----------+------+-----+---------+----------------+
| 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
คอลัมน์(ยกเลิกการทำดัชนี)