Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kecepatan kueri berdasarkan urutan kolom

Jawabannya adalah ya, itu penting, dan itu bisa sangat berarti, tapi biasanya tidak banyak.

Semua I/O dilakukan pada tingkat halaman (biasanya 2K atau 4K tergantung pada OS Anda). Data kolom untuk baris disimpan bersebelahan, kecuali jika halaman menjadi penuh, dalam hal ini data ditulis di halaman lain (biasanya berikutnya).

Semakin besar ruang data di disk yang diperlukan untuk kolom di antara (berdasarkan definisi tabel) kolom yang Anda pilih, semakin besar kemungkinan data untuk kolom yang dipilih (terkadang) berada di halaman yang berbeda. Berada di halaman yang berbeda dapat mengakibatkan operasi I/O tambahan (jika tidak ada baris lain yang dipilih di halaman lain). Dalam kasus terburuk, setiap kolom yang Anda pilih bisa berada di halaman yang berbeda.

Ini contohnya:

create table bad_layout (
num1 int,
large1 varchar(4000),
num2 int,
large2 varchar(4000),
num3 int,
large3 varchar(4000)
);

create table better_layout (
num1 int,
num2 int,
num3 int,
large1 varchar(4000),
large2 varchar(4000),
large3 varchar(4000)
);

Membandingkan:pilih num1, num2, num3 dari bad_layout;pilih num1, num2, num3 dari better_layout;

Karena untuk bad_layout setiap kolom num pada dasarnya akan berada di halaman yang berbeda, setiap baris akan membutuhkan 3 operasi i/O. Sebaliknya, untuk jumlah kolom better_layout biasanya akan berada di halaman yang sama.

Kueri bad_layout kemungkinan akan memakan waktu sekitar 3 kali lebih lama untuk dieksekusi.

Tata letak tabel yang baik dapat membuat perbedaan besar pada kinerja kueri. Anda harus mencoba untuk menjaga kolom yang biasanya dipilih sedekat mungkin satu sama lain dalam tata letak tabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolom bersyarat untuk kueri berdasarkan kolom lain di MySQL

  2. tabel memperbarui ruang kosong saat pengguna tidak memasukkan apa pun ke kotak teks

  3. Bisakah saya menggunakan ON DUPLICATE KEY UPDATE dengan kueri INSERT menggunakan opsi SET?

  4. GALAT:HHH000299:Tidak dapat menyelesaikan pembaruan skema java.lang.NullPointerException

  5. Django MySQL kueri berbeda untuk mendapatkan banyak nilai