Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ปรับปรุงประสิทธิภาพการค้นหา MySQL ด้วยอักขระตัวแทน (%%) หรือไม่


ไม่ MySQL จะไม่ปรับปรุงประสิทธิภาพการค้นหาเมื่อใดก็ตามที่คุณมี wildcard ชั้นนำ เนื่องจาก MySQL จะไม่สามารถใช้ดัชนีได้ หากคุณเปลี่ยนเป็น 'anyLetter%' ก็จะสามารถใช้ดัชนีได้

ไวยากรณ์ด้านล่างดีกว่าที่จะใช้กับสัญลักษณ์แทนต่อท้าย ไวยากรณ์มีดังนี้ −

เลือก *FROM yourTableName โดยที่ yoorColumnName LIKE 'anyLetter%';

แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> สร้างตาราง TrailingWildCardDemo -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> ชื่อ Varchar(20), -> คีย์หลัก (Id) -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (0.71 วินาที) 

ตอนนี้คุณสามารถแทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −

mysql> แทรกลงในค่า TrailingWildCardDemo(Name)('John');Query OK, 1 แถวได้รับผลกระทบ (0.13 วินาที)mysql> แทรกลงในค่า TrailingWildCardDemo(Name)('Johnson');Query OK, 1 แถวได้รับผลกระทบ ( 0.17 วินาที) mysql> แทรกลงในค่า TrailingWildCardDemo (ชื่อ) ('Mike'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที) mysql> แทรกลงในค่า TrailingWildCardDemo (ชื่อ) ('Kevin'); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว ( 0.23 วินาที) mysql> แทรกลงในค่า TrailingWildCardDemo (ชื่อ) ('Adam'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่า TrailingWildCardDemo (ชื่อ) ('Ethan'); ตกลง ตกลง 1 แถวได้รับผลกระทบ ( 0.16 วินาที) mysql> แทรกลงในค่า TrailingWildCardDemo (ชื่อ) ('James'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้ −

mysql> เลือก *จาก TrailingWildCardDemo;

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+----+---------+| รหัส | ชื่อ |+----+---------+| 1 | จอห์น || 2 | จอห์นสัน || 3 | ไมค์ || 4 | เควิน || 5 | อดัม || 6 | อีธาน || 7 | James |+----+---------+7 แถวในชุด (0.00 วินาที)

นี่คือข้อความค้นหาของสัญลักษณ์แทนต่อท้าย -

mysql> เลือก *จาก TrailingWildCardDemo โดยที่ชื่อ LIKE 'j%';

ต่อไปนี้เป็นผลลัพธ์ -

<ก่อนหน้า>+----+---------+| รหัส | ชื่อ |+----+---------+| 1 | จอห์น || 2 | จอห์นสัน || 7 | James |+----+---------+3 แถวในชุด (0.00 วินาที)