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

Apakah tampilan MySQL selalu melakukan pemindaian tabel penuh?

Tampilan di MySQL tidak diindeks sehingga menurut sifatnya memerlukan pemindaian penuh setiap kali diakses. Secara umum, ini membuat Tampilan benar-benar hanya berguna untuk situasi di mana Anda memiliki kueri statis yang cukup kompleks yang mengembalikan kumpulan hasil kecil dan Anda berencana untuk mengambil seluruh kumpulan hasil setiap saat.

Sunting: Tentu saja Tampilan akan menggunakan indeks pada tabel yang mendasarinya sehingga Tampilan itu sendiri dioptimalkan (jika tidak, mereka tidak akan masuk akal untuk digunakan sama sekali) tetapi karena tidak ada indeks pada Tampilan, tidak mungkin untuk kueri WHERE di tampilan yang akan dioptimalkan.

Membangun indeks untuk Tampilan akan mahal karena meskipun saya belum mencoba membuat profil Tampilan apa pun, saya cukup yakin bahwa tabel temp dibangun di belakang layar dan kemudian set hasil dikembalikan. Sudah membutuhkan banyak waktu untuk membuat tabel temp, saya tidak ingin tampilan yang juga mencoba menebak indeks apa yang diperlukan. Yang memunculkan poin kedua yaitu bahwa MySQL saat ini tidak menawarkan metode untuk menentukan indeks apa yang digunakan untuk Tampilan, jadi bagaimana ia mengetahui bidang apa yang perlu diindeks? Apakah itu menebak berdasarkan kueri Anda?

Anda dapat mempertimbangkan untuk menggunakan Tabel Sementara karena dengan begitu Anda dapat menentukan indeks pada bidang di tabel sementara. Namun, dari pengalaman ini cenderung sangat, sangat lambat.

Jika semua tampilan ini berisi SELECT ALL FROM table1, table2, table3; maka saya harus bertanya mengapa kueri ini harus dalam Tampilan sama sekali? Jika karena alasan tertentu benar-benar diperlukan, Anda mungkin ingin menggunakan prosedur tersimpan untuk merangkum kueri karena Anda kemudian bisa mendapatkan kinerja yang dioptimalkan sambil mempertahankan manfaat panggilan yang lebih sederhana ke database untuk kumpulan hasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF Core 2.0 Identity - Menambahkan properti navigasi

  2. Menyetel __tablename__ secara dinamis untuk sharding di SQLAlchemy?

  3. Masalah Instalasi MYSQL

  4. Normalisasikan Semua Karakter UTF8 ke dalam format paling standar

  5. Bagaimana mengatasi MySQL innodb Menunggu kunci metadata tabel di TRUNCATE TABLE?