Mengingat Anda spesifikasi yang Anda sedang memilih semua kolom, ada sedikit perbedaan pada saat ini . Namun, sadari bahwa skema database memang berubah. Jika Anda menggunakan, SELECT *
Anda akan mendapatkan kolom baru ditambahkan ke tabel, meskipun kemungkinan besar, kode Anda tidak siap untuk menggunakan atau menyajikan data baru itu. Ini berarti bahwa Anda mengekspos sistem Anda terhadap perubahan kinerja dan fungsi yang tidak terduga.
Anda mungkin bersedia mengabaikan ini sebagai biaya kecil, tetapi sadarilah bahwa kolom yang tidak Anda perlukan tetap harus:
- Baca dari basis data
- Dikirim melalui jaringan
- Marshall ke dalam proses Anda
- (untuk teknologi tipe ADO) Disimpan dalam tabel data dalam memori
- Diabaikan dan dibuang / dikumpulkan
Item # 1 memiliki banyak biaya tersembunyi termasuk menghilangkan beberapa indeks penutup potensial, menyebabkan pemuatan halaman data (dan cache server merosot), menimbulkan kunci baris / halaman / tabel yang mungkin bisa dihindari.
Seimbangkan ini dengan penghematan potensial dengan menentukan kolom versus kolom dan satu *
-satunya potensi penghematan adalah:
- Programmer tidak perlu mengunjungi kembali SQL untuk menambahkan kolom
- Network-transport SQL lebih kecil / lebih cepat
- SQL Server query waktu parse / validasi
- Cache paket kueri SQL Server
Untuk item 1, kenyataannya adalah Anda akan menambahkan / mengubah kode untuk menggunakan kolom baru apa pun yang mungkin Anda tambahkan, jadi ini adalah cuci.
Untuk item 2, perbedaannya jarang cukup untuk mendorong Anda ke ukuran paket atau jumlah paket jaringan yang berbeda. Jika Anda sampai pada titik di mana waktu transmisi pernyataan SQL adalah masalah utama, Anda mungkin perlu mengurangi tingkat pernyataan terlebih dahulu.
Untuk item 3, tidak ada penghematan karena perluasan *
harus tetap terjadi, yang berarti tetap berkonsultasi dengan skema tabel. Secara realistis, daftar kolom akan dikenakan biaya yang sama karena harus divalidasi terhadap skema. Dengan kata lain ini adalah mencuci lengkap.
Untuk item 4, ketika Anda menentukan kolom tertentu, cache rencana kueri Anda bisa menjadi lebih besar tetapi hanya jika Anda berurusan dengan set kolom yang berbeda (yang bukan yang Anda tentukan). Dalam hal ini, Anda ingin entri cache yang berbeda karena Anda ingin paket yang berbeda sesuai kebutuhan.
Jadi, ini semua turun, karena cara Anda menentukan pertanyaan, untuk masalah ketahanan dalam menghadapi modifikasi skema akhirnya. Jika Anda membakar skema ini ke dalam ROM (itu terjadi), maka sebuah *
sangat diterima.
Namun, pedoman umum saya adalah bahwa Anda hanya harus memilih kolom yang Anda butuhkan, yang berarti bahwa kadang - kadang akan terlihat seperti Anda meminta semuanya, tetapi DBA dan evolusi skema berarti bahwa beberapa kolom baru mungkin muncul yang dapat sangat mempengaruhi permintaan. .
Saran saya adalah Anda harus SELALU MEMILIH kolom tertentu . Ingatlah bahwa Anda menjadi baik pada apa yang Anda lakukan berulang-ulang, jadi biasakan melakukannya dengan benar.
Jika Anda bertanya-tanya mengapa suatu skema dapat berubah tanpa mengubah kode, pikirkan dalam hal pencatatan audit, tanggal efektif / kedaluwarsa dan hal-hal serupa lainnya yang ditambahkan oleh DBA untuk masalah kepatuhan secara sistemik. Sumber lain dari perubahan curang adalah denormalisasi untuk kinerja di tempat lain dalam sistem atau bidang yang ditentukan pengguna.