Score:0

เหตุใดข้อความค้นหาธรรมดาของฉันจึงช้าเกินไป

ธง ru

ฉันไม่รู้ว่าเหตุใดการค้นหาในตาราง "เมือง" ของฉันจึงช้ามาก ข้อความค้นหาของฉันกำลังมองหาตาราง "เมือง" ซึ่งอยู่ห่างจากตัวเมืองประมาณ 25 กม. ฉันใช้แบบสอบถามง่ายๆ นี้ และฐานข้อมูลใช้เวลาเกือบ 20 วินาทีในการส่งคืนผลลัพธ์

เลือกเมืองปลายทางระยะทางจากเมือง WHERE city_start='เวียน' และระยะทาง <= 25 ลำดับตามระยะทาง ASC

เอ็นจิ้นตารางคือ InnoDB ตารางมีประมาณ 7 ล้านแถว:

+----------------------+------------+------+----+- --------+++++
| ฟิลด์ | พิมพ์ | โมฆะ | คีย์ | เริ่มต้น | พิเศษ |
+----------------------+------------+------+----+- --------+++++
| รหัส | int(11) | ไม่ | ปรีดี | โมฆะ | auto_increment |
| id_of_start | int(11) | ไม่ | | โมฆะ | |
| id_of_destination | int(11) | ไม่ | | โมฆะ | |
| city_start | ข้อความ | ไม่ | | โมฆะ | |
| เมือง_ปลายทาง | ข้อความ | ไม่ | | โมฆะ | |
| ระยะทาง | สองเท่า | ไม่ | | โมฆะ | |
+----------------------+------------+------+----+- --------+++++

ใครช่วยแนะนำวิธีเพิ่มประสิทธิภาพฐานข้อมูลหรือแบบสอบถามให้ฉันได้บ้าง

Score:0
ธง st

สำหรับข้อความค้นหานี้ คุณควรใช้ดัชนีสำหรับ city_start + Distance

สร้าง INDEX idx_citie_start_distance บนเมือง (city_start, Distance);

คุณยังสามารถสร้างดัชนีสองรายการ: city_start และอีกอันสำหรับระยะทาง ที่ควรจะทำงานได้ดีเช่นกัน

Sahasrar avatar
ru flag
มันได้ผล ขอบคุณ ฉันยังได้รับเคล็ดลับในการเปลี่ยนเอ็นจิ้นการจัดเก็บข้อมูลเป็น MyISAM และเวลาสืบค้นจะเท่ากันกับ InnoDB ที่มีดัชนี.... เป็นเช่นนั้นด้วยหรือ หรือไม่ใช่วิธีที่ดีในการสร้าง DB สำหรับโซลูชันนี้
st flag
@Sahasrar, InnoDB อนุญาตให้คุณใช้ CONSTRAINTS และจัดการ ROW LOCK ซึ่งหมายความว่า InnoDB เป็นตัวเลือกที่ดีกว่าหากตารางของคุณประมวลผลในปริมาณที่มากขึ้นหรือ UPDATEs และ/หรือ DELETE MyISAM อนุญาตให้ INSERT และ SELECT พร้อมกัน ซึ่งอาจเป็นทางเลือกที่ดีกว่าหากตารางของคุณรองรับโหลด INSERTS จำนวนมากและอัปเดตหรือลบน้อยมาก
Sahasrar avatar
ru flag
ตารางนี้เกี่ยวกับการค้นหาเมืองที่ใกล้ที่สุด ดังนั้น 99% ของคำถามจะเกี่ยวกับการอ่าน จากความคิดเห็นของคุณ ฉันคิดว่าตารางของฉันใช้ MyISAM ดีกว่า ฉันผิดไหม
st flag
@Sahasrar นั่นสมเหตุสมผลแล้ว ฉันจะเลือก MyISAM ในกรณีนี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา