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

Bagaimana cara kerja tampilan MySQL?

Tampilan berfungsi seperti tabel , tapi itu bukan tabel. Itu tidak pernah ada; itu hanya pernyataan SQL yang disiapkan yang dijalankan saat Anda mereferensikan nama tampilan. yaitu:

CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

...setara dengan berlari:

SELECT x.* 
  FROM (SELECT * FROM bar) x

MySQLDump tidak akan pernah berisi baris untuk dimasukkan ke dalam tampilan...

Sayangnya, itu dengan desain (walaupun dipertanyakan). Ada banyak batasan untuk tampilan MySQL, yang didokumentasikan:http://dev.mysql.com/doc/refman/5.0/en/create-view.html

Jadi jika itu hanya tabel imajiner/pernyataan yang disiapkan, apakah itu berarti secara teoritis memiliki kinerja yang sama (atau bahkan kurang) seperti tabel/kueri normal?

Tidak.
Sebuah tabel dapat memiliki indeks yang terkait, yang dapat membuat pengambilan data lebih cepat (dengan biaya tertentu untuk penyisipan/pembaruan). Beberapa database mendukung tampilan "terwujud", yang merupakan tampilan yang dapat menerapkan indeks - yang seharusnya tidak mengejutkan bahwa MySQL tidak mendukung mengingat fungsionalitas tampilan terbatas (yang baru dimulai di v5 IIRC, sangat terlambat untuk permainan).

Karena tampilan adalah tabel turunan, kinerja tampilan hanya sebaik kueri yang menjadi dasar pembuatannya. Jika kueri itu menyebalkan, masalah kinerja hanya akan menjadi bola salju... Yang mengatakan, saat menanyakan tampilan - jika referensi kolom tampilan dalam klausa WHERE tidak dibungkus dengan fungsi (IE:WHERE v.column LIKE ... , tidak WHERE LOWER(t.column) LIKE ... ), pengoptimal dapat mendorong kriteria (disebut predikat) ke kueri asli - membuatnya lebih cepat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah jumlah minggu menjadi tanggal?

  2. Dapatkan id yang dimasukkan terbaru di pemicu?

  3. Perbedaan antara tipe data int dan int (2) di sql saya

  4. Mengapa 2 baris terpengaruh dalam `INSERT ... ON DUPLICATE KEY UPDATE` saya?

  5. OperationalError:(2002, Tidak dapat terhubung ke server MySQL lokal melalui soket '/var/run/mysqld/mysqld.sock' (2))