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

MySQL กำจัดนิพจน์ย่อยทั่วไประหว่างข้อ SELECT และ HAVING/GROUP BY หรือไม่ จะทดสอบได้อย่างไร?


หากต้องการทดสอบ ให้ใช้ฟังก์ชัน sleep()

กรณีที่ 1

ไวยากรณ์มีดังนี้ −

เลือก yourColumnName+sleep(yourIntegerValue)จาก yourTableNameGROUP BY yourColumnName+sleep(yourIntegerValue);;

กรณีที่ 2 − คุณสามารถใช้รูปแบบอื่นได้ดังนี้ −

เลือก yourColumnName+sleep(yourIntegerValue) เป็น anyAliasNameFROM yourTableNameGROUP BY yourAliasName;

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −

mysql> สร้างตาราง sleepDemo -> ( -> ค่า int -> ); ตกลง ตกลง 0 แถวได้รับผลกระทบ (1.25 วินาที)

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

mysql> แทรกลงในค่า sleepDemo (40); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.18 วินาที) mysql> แทรกลงในค่า sleepDemo (60); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า sleepDemo ( 60);แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.10 วินาที)

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

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

นี่คือผลลัพธ์ -

<ก่อนหน้า>+-------+| ค่า |+-------+| 40 || 60 || 60 |+-------+3 แถวในชุด (0.00 วินาที)

นี่คือการสืบค้นเพื่อกำจัดนิพจน์ย่อยทั่วไประหว่างอนุประโยค SELECT และ HAVING/GROUP BY

กรณีที่ 1 − แบบสอบถามมีดังต่อไปนี้ −

mysql> SELECT value+sleep(3) -> FROM sleepDemo -> GROUP BY value+sleep(3);

ผลลัพธ์จะเป็นดังนี้ −

<ก่อนหน้า>+----------------+| ค่า+นอน(3) |+----------------+| 40 || 60 |+----------------+2 แถวในชุด (9.00 วินาที)

ข้อความค้นหาด้านบนใช้เวลา 9 วินาทีสำหรับแต่ละค่า (40 เป็นเวลา 3 วินาที 60 เป็นเวลา 3 วินาที 60 เป็นเวลา 3 วินาที)

กรณีที่ 2 − แบบสอบถามมีดังต่อไปนี้ −

mysql> SELECT value+sleep(3) As v -> FROM sleepDemo -> GROUP BY v;

ผลลัพธ์จะเป็นดังนี้ −

<ก่อนหน้า>+------+| วี |+------+| 40 || 60 |+------+2 แถวในชุด (9.00 วินาที)