Haruskah saya memecah query SQL di baris yang berbeda? Misalnya dalam proyek yang saya kerjakan, kami memiliki permintaan yang mengambil 1.600 kolom! 1600 + karakter tab. Saya menulis pertanyaan seperti ini:
"SELECT bla , bla2 , bla FROM bla " .
"WHERE bla=333 AND bla=2" .
"ORDER BY nfdfsd ...";
Tetapi mereka meminta saya untuk menempatkan mereka dalam satu baris dan mengatakan bahwa gaya saya berformat buruk. Mengapa itu praktik yang buruk?
sql
code-formatting
GorillaApe
sumber
sumber
.
), yang saya lihat beberapa programmer menyalahkan untuk biaya kinerja.Jawaban:
Untuk alasan kontrol sumber, kami memiliki linebreak setelah setiap klausa tempat, atau koma. Jadi di atas Anda berubah menjadi
(tab dan penyelarasan tidak memiliki standar di sini, tetapi koma biasanya memimpin)
Namun, tidak ada perbedaan kinerja.
sumber
Kueri yang 1.600 kolom sepertinya membutuhkan ulasan serius oleh DBA yang bagus.
Jika kueri rumit, saya akan membungkusnya. Jika itu mudah saya akan meninggalkannya sebagai satu baris kecuali itu akan terlalu lama, maka saya akan mulai membungkusnya lagi.
Ini semua tentang pengelolaan dan memahami apa yang seharusnya dilakukan sehingga membungkus atau tidak membungkus dapat diputuskan dengan cepat, kecuali jika organisasi Anda memiliki beberapa aturan pemformatan kode tentang hal itu.
Re: itu menjadi praktik pengkodean yang buruk. Sulit! Ini latihan yang sangat bagus. Tidak ada alasan bagus yang saya tahu untuk menggunakan kueri selama itu, dan banyak alasan bagus untuk memformatnya kembali. Seperti yang saya katakan sebelumnya, DBA yang terampil mungkin perlu mengerjakannya.
sumber
Satu-satunya keuntungan dari kueri baris tunggal yang terlintas dalam pikiran adalah bahwa kueri tersebut mungkin lebih mudah untuk dipahami. Selain itu, saya bingung. Secara pribadi, saya lebih suka pertanyaan yang lebih mudah dibaca dan dibagi.
sumber
Komentar multiline baik, hampir vital ketika berhadapan dengan SQL dalam jumlah besar. Dan jika bahasa pemrograman Anda memiliki tanda kutip heredoc, itu lebih baik (karena banyak editor dapat menyoroti sintaks SQL di dalamnya).
Contoh:
Ketika bekerja dengan permintaan puluhan baris (atau ratusan) baik lekukan dan spasi putih membuat teks bisa dikerjakan.
sumber
Tampaknya ini khusus tentang mendefinisikan kueri besar di dalam semacam bahasa pemrograman, melihat Anda memasukkan kueri ke dalam string literal dan menyatukannya.
Jika ini adalah bahasa yang dikompilasi, seharusnya tidak ada bedanya sama sekali - salah satu optimasi pertama yang dilakukan oleh kompiler adalah secara otomatis menggabungkan string string bersama-sama, jadi Anda berakhir dengan string besar.
Adapun sintaksnya, Anda seharusnya mempertimbangkan untuk memindahkan kueri di luar kode Anda - menyimpannya dalam file sumber daya .sql yang terpisah, dan minta perangkat lunak Anda membaca file itu. Gunakan pernyataan disiapkan untuk variabel, jika itu bukan permintaan yang dibangun secara dinamis (yaitu di mana-klausa dll ditambahkan tergantung pada parameter tertentu). Jika dibangun secara dinamis, Anda dapat menambahkan variabel pengganti Anda sendiri, memasukkan parameter tambahan di mana dan kapan diperlukan.
Adapun 1.600 kolom, saya sangat merekomendasikan membangun tampilan untuk itu, jadi alih-alih
kamu akan mendapatkan
PILIH * DARI viewX WHERE y
Jauh lebih ringkas dalam kode Anda sendiri.
sumber
Saya sering menggunakan format yang diajukan oleh @glasnt untuk memecahkan masalah kueri yang rumit, namun biasanya memiliki kueri dalam satu baris.
Ini mungkin tidak menjawab pertanyaan Anda, tetapi saya juga sangat menyarankan memecah permintaan Anda menjadi pertanyaan yang lebih kecil. Jelas ini tergantung pada kueri, tetapi semakin banyak klausa dan gabungan yang Anda tambahkan ke kueri Anda - semakin sedikit mesin SQL yang dapat mengoptimalkan kueri Anda.
Vendor basis data Anda harus memiliki alat seperti EXPLAIN MySQL (atau pengaturan SHOWPLAN_ALL MSSQL) yang akan menunjukkan kepada Anda apa yang dilakukan database di belakang layar untuk mengoptimalkan kueri Anda, setiap kali database harus membuat tabel sementara atau semacamnya, Anda menambahkan penundaan besar ketika Anda berbicara tentang banyak pengguna secara bersamaan.
Dengan memindahkan apa yang tampak seperti logika sepele dari SQL dan ke dalam kode Anda, Anda dapat memberikan peningkatan kinerja yang dramatis - SQL sangat bagus dalam operasi sederhana.
Manfaat yang jelas untuk ini karena mungkin berhubungan dengan Anda, adalah bahwa pertanyaan Anda jauh lebih kompleks dan mudah dibaca - mudah dikelola (tidak> 1.600 kolom), dan lebih cepat. Jelas merupakan kemenangan serba.
Semoga ini membantu :)
sumber