Apakah pengetahuan asas caching pertanyaan dalam MySQL?

王林
Lepaskan: 2023-05-31 10:35:38
ke hadapan
1722 orang telah melayarinya

Apakah itu cache pertanyaan?

Cache pertanyaan MySQL, walaupun tidak digunakan dalam MySQL 5.7 (dan dialih keluar dalam 8.0), menyimpan penyata yang dijalankan sebelum ini dalam ingatan: dengan kata lain, cache pertanyaan biasanya menyimpan penyataan SELECT di tengah memori pangkalan data. Jadi, jika kita menjalankan pertanyaan dan kemudian menjalankan pertanyaan yang sama sekali lagi beberapa waktu kemudian, keputusan akan dikembalikan dengan lebih cepat kerana ia akan diambil daripada memori dan bukannya dari cakera.

Cache pertanyaan menyimpan pertanyaan dan set hasil. Jadi apabila kami menjalankan pertanyaan yang sama, hasil cache pertanyaan dikembalikan serta-merta. Saiz cache pertanyaan boleh dikawal dengan menetapkan pembolehubah sistem query_cache_size, tetapi berikut adalah kaveat: jika anda mahu pertanyaan menggunakan cache pertanyaan, mereka mesti, mesti, sama, bait demi bait. Ini bermakna walaupun anda fikir kedua-dua pertanyaan ini harus dicache dengan cara yang sama:

SELECT * FROM demo_table WHERE column = 'Demo';
select * from demo_table where column = 'Demo';

Malah, mereka tidak begitu. Jika cache pertanyaan MySQL memerlukan semua pertanyaan adalah sama, maka tiada keputusan akan dikembalikan walaupun ia berbeza dengan hanya satu bait.

Jadi, untuk meringkaskan, apabila MySQL melaksanakan pernyataan, perkara pertama yang dilakukannya ialah menyemak untuk melihat sama ada caching pertanyaan didayakan (jika anda memerlukan penyegar semula, kembali ke blog terakhir kami mengenai Artikel pertanyaan MySQL yang perlahan. ) Jika caching pertanyaan didayakan, MySQL akan menyemak terlebih dahulu untuk sebarang padanan yang berkaitan dengan pertanyaan jika tiada padanan, MySQL akan meneruskan ke langkah seterusnya. Jika terdapat padanan pendua, MySQL akan mengembalikan hasil daripada cache pertanyaan.

Cache pertanyaan dalaman MySQL

Sebelum kembali ke perlawanan, cache pertanyaan MySQL memerlukan pengesahan daripada MySQL: d OES Pengguna ini mempunyai kebenaran yang diperlukan untuk menyelesaikan tindakan sedemikian? Sekiranya saya menolak untuk melaksanakan pertanyaan?

Berikut ialah senarai kebenaran yang disemak oleh MySQL:

特权

简要说明
ALL 赋予特定 MySQL 用户所有权限。
SELECT 授予特定 MySQL 用户从指定数据库中选择行的权限。
UPDATE 授予特定 MySQL 用户更新指定表中现有行的权限。
SHOW DATABASES 使特定 MySQL 用户能够获取存在于一个特定 MySQL 实例中的所有 MySQL 数据库的列表。
USAGE 赋予用户仅使用 MySQL 的权力,这意味着用户不能在其中运行任何查询。本质上是无特权的同义词。
Keistimewaan

Penerangan ringkas
SEMUA Berikan semua kebenaran kepada pengguna MySQL tertentu.
SELECT Memberi kebenaran pengguna MySQL khusus untuk memilih baris daripada pangkalan data yang ditentukan.
KEMASKINI Memberi kebenaran pengguna MySQL khusus untuk mengemas kini baris sedia ada dalam jadual yang ditentukan.
TUNJUKKAN PANGKALAN DATA Membolehkan pengguna MySQL tertentu untuk mendapatkan senarai semua pangkalan data MySQL yang wujud dalam contoh MySQL tertentu .
PENGGUNAAN Memberi pengguna kuasa untuk menggunakan MySQL sahaja, yang bermaksud pengguna tidak boleh menjalankan sebarang pertanyaan di dalamnya. Pada asasnya sinonim untuk unprivileged.

Mempunyai lebih banyak keistimewaan, tetapi anda faham maksudnya. MySQL menyimpan maklumat berkaitan jadual bersama-sama dengan pertanyaan cache, jadi kebenaran adalah penting untuk caching pertanyaan. Kebenaran juga penting kerana ia adalah salah satu peringkat pertama proses semakan keputusan MySQL. Begini cara semuanya berfungsi:

优先识别

MYSQL 状态

解释
1 MySQL 正在检查查询缓存中的权限。 首先,MySQL 检查特定用户是否有权访问特定结果。
2 MySQL 正在检查查询本身的查询缓存。 接下来,MySQL 开始检查查询缓存中是否存在相同的查询。如果匹配,MySQL 返回;如果没有,MySQL 继续下一步。
3 MySQL 将查询缓存中的条目标记为无效。 随着表的变化,查询缓存需要更新。所以在这一步中,MySQL 决定将查询缓存中的条目标记为无效。
4 发送结果。 MySQL 发送缓存的结果并显示它。
5 将结果存储在缓存中。 MySQL 将查询结果保存在查询缓存中。
6 查询缓存被锁定。 缓存过程现在结束——MySQL 锁定查询缓存。
Pengenalpastian Keutamaan Status MYSQL Penjelasan
1 MySQL sedang menyemak kebenaran dalam cache pertanyaan. Pertama, MySQL menyemak sama ada pengguna tertentu mempunyai kebenaran untuk mengakses hasil tertentu.
2 MySQL sedang menyemak cache pertanyaan untuk pertanyaan itu sendiri. Seterusnya, MySQL mula menyemak sama ada pertanyaan yang sama wujud dalam cache pertanyaan. Jika ada padanan, MySQL kembali jika tidak, MySQL meneruskan ke langkah seterusnya.
3 MySQL menandakan masukan dalam cache pertanyaan sebagai tidak sah. Apabila jadual berubah, cache pertanyaan perlu dikemas kini. Jadi dalam langkah ini, MySQL memutuskan untuk menandakan entri dalam cache pertanyaan sebagai tidak sah.
4 Hantar hasilnya. MySQL menghantar hasil cache dan memaparkannya.
5 Simpan hasil dalam cache. MySQL menyimpan hasil pertanyaan dalam cache pertanyaan.
6 Cache pertanyaan dikunci. Proses caching kini selesai - MySQL mengunci cache pertanyaan.

"MySql tidak mempunyai cache!": Bergantung pada sama ada cache pertanyaan rosak?

Jika kami menggunakan sebarang pembolehubah dalam pertanyaan, sama ada dalam fungsi atau keadaan partition, cache pertanyaan akan menjadi tidak sah. Sebagai contoh, jika kita berurusan dengan data besar dan kita menggunakan SELECT ... INTO OUTFILE untuk memuatkan set data yang besar ke dalam MySQL, hasilnya tidak akan dicache sama ada. Biasanya cache pertanyaan tidak berfungsi apabila menggunakan pertanyaan seperti SELECT ... [LOCK | FOR | INTO], juga cache pertanyaan tidak berfungsi jika kita menyemak nilai AUTO_INCREMENT dalam lajur dengan nilai NULL, itu bermakna jika kita. Terdapat lajur kenaikan dengan AUTO_INCREMENT dan kami menjalankan pertanyaan seperti ini:

SELECT * FROM demo_table WHERE increment IS NULL;
Salin selepas log masuk

Cache pertanyaan tidak akan berkuat kuasa.

Betul kata anda, semua ciri ini mungkin membuatkan sesetengah orang berasa ia tidak berguna. Walaupun seperti ciri-ciri lain dalam MySQL, cache pertanyaan mempunyai batasannya sendiri dan oleh itu tidak selalu berfungsi. Sebagai tambahan kepada yang dinyatakan di atas, ia enggan berfungsi apabila penyata menjana amaran atau apabila penyata dijalankan di atas meja dengan enjin storan SEMENTARA dan dalam beberapa kes sudut lain. Setiap kali seseorang menulis apa-apa pada jadual, cache pertanyaan juga dikosongkan.

Kefungsian cache pertanyaan juga bergantung pada parameter query_cache_size. Lebih besar parameter ini, lebih baik, tetapi ambil perhatian bahawa parameter ini banyak bergantung pada ingatan anda. Perlu diingat bahawa struktur asas cache pertanyaan memerlukan sekurang-kurangnya 40kB storan secara lalai dan nilai lalainya mungkin antara 1MB dan 16MB. Jika pangkalan data anda membaca data dengan kerap, meningkatkan nilai parameter boleh membantu mencari penyelesaian terbaik, tetapi cuba lagi.

Anda boleh mengosongkan keseluruhan kandungan cache pertanyaan menggunakan pernyataan "RESET QUERY CACHE". Jika anda menggunakan pernyataan seperti FLUSH TABLES, semua nilai cache pertanyaan juga akan dipadamkan.

MySQL malah membolehkan anda melihat berapa banyak pertanyaan yang disimpan dalam cache pertanyaan dengan menjalankan pertanyaan:

SHOW STATUS LIKE 'Qcache_queries_in_cache%';
Salin selepas log masuk

Anda akan mendapat hasil seperti ini:

MySQL:

+-------------------------+--------+
| Variable_name           | Value  |
+-------------------------+--------+
| Qcache_queries_in_cache | 1      |
+-------------------------+--------+
Salin selepas log masuk

Dalam kes ini, kami dapat melihat bahawa cache pertanyaan kami kini menyimpan cache hasil. Jalankan kenyataan seperti FLUSH TABLES dan semua nilai akan hilang.

Atas ialah kandungan terperinci Apakah pengetahuan asas caching pertanyaan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!