Baru-baru ini saya melihat pertanyaan "di mana 1 = 1 pernyataan" ; sebuah konstruk SQL yang sering saya gunakan dalam membangun SQL dinamis dalam upaya untuk menulis kode yang lebih bersih (dari perspektif bahasa host).
Secara umum, apakah penambahan pada statemen SQL ini memengaruhi kinerja kueri secara negatif? Saya tidak mencari jawaban sehubungan dengan sistem basis data tertentu (karena saya telah menggunakannya dalam DB2, SQL Server, MS-Access, dan mysql) - kecuali tidak mungkin untuk menjawab tanpa masuk ke spesifikasi.
performance
optimization
transistor1
sumber
sumber
1=1
WHILE 1=1
klausa. Namun, tampaknya tidak memiliki dampak yang terdeteksi pada waktu eksekusi.Jawaban:
Semua RDBMS utama, sejauh yang saya tahu, telah dibangun dalam evaluasi konstan. Ini harus mengevaluasi hampir seketika di salah satu dari mereka.
sumber
Dari Perspektif SQL Server jika Anda melakukan
WHERE 1=1
untuk memungkinkan untuk lulus parameter dinamis dan melewatkan parameter dari dievaluasi, saya sarankan Anda membaca beberapa artikel dari SQL Server MV Erland Sommarskog. Pendekatannya menghilangkan kebutuhan untuk melakukan beberapa trik lain di dalam SQL dinamis (sepertiWHERE Column = Column
konstruk atau menggunakanWHERE (Col = Val OR 1=1) and (Col2 = Val2 OR 1=1)
konstruk). The 1 = 1 seharusnya tidak menyebabkan masalah kinerja seperti yang disebutkan @JNK (Saya telah memberi 1 jawabannya di sana dan itu yang harus diterima), saya pikir Anda akan menemukan beberapa tips yang baik dari artikel Erland di sekitar SQL dinamis dan Anda juga akan melihat dia masih menggunakan yang1=1
untuk kasus-kasus di mana tidak ada parameter yang dilewati tetapi ia menghindarinya untuk parameter individu yang tidak dilewati, ia tidak melakukannya.sumber
Dengan MySQL, Anda dapat memeriksa, menjalankan MENJELAJAH DIPERPANJANG dan kemudian MENUNJUKKAN PERINGATAN untuk melihat permintaan yang sebenarnya. tl; dr: itu dioptimalkan jauh.
sumber
In older MySQL releases, extended information was produced using EXPLAIN EXTENDED. That syntax is still recognized for backward compatibility but extended output is now enabled by default, so the EXTENDED keyword is superfluous and deprecated. Its use results in a warning, and it will be removed from EXPLAIN syntax in a future MySQL release.
Itu dihapus di MySQL v 8.0.