Mengapa pernyataan MySQL saya lambat apabila menanyakan jadual besar?

DDD
Lepaskan: 2024-11-19 07:33:02
asal
472 orang telah melayarinya

Why is my MySQL statement slow when querying a large table?

Penyata MySQL Melaksanakan Perlahan-lahan dengan Jadual Besar

Apabila bekerja dengan pangkalan data yang mengandungi sejumlah besar rekod, adalah perkara biasa untuk pertanyaan diambil masa yang panjang untuk dilaksanakan. Satu contoh ialah pertanyaan seperti:

select * from `ratings` order by id limit 499500, 500
Salin selepas log masuk

Lazimnya, pertanyaan harus dilaksanakan dengan cepat, walaupun untuk pangkalan data yang mengandungi berjuta-juta rekod. Untuk menangani isu ini, adalah penting untuk memahami faktor asas yang mempengaruhi prestasi pertanyaan.

Pengindeksan dan Pemilihan Enjin

Penggunaan pengindeksan boleh meningkatkan kelajuan sesuatu secara mendadak. pertanyaan, terutamanya apabila pertanyaan melibatkan jadual besar. Dalam sampel kod yang disediakan, susunan penyata mengikut id menandakan bahawa keputusan harus dikembalikan diisih mengikut lajur id. Jika lajur id tidak diindeks, pangkalan data perlu mengimbas keseluruhan jadual untuk mendapatkan semula data, yang boleh memakan masa untuk jadual besar. Menambah indeks pada lajur id membolehkan pangkalan data mengakses terus baris yang berkaitan tanpa perlu melakukan imbasan jadual yang lengkap.

Mengenai pilihan enjin pangkalan data, adalah penting untuk ambil perhatian bahawa contoh yang diberikan menggunakan MyISAM, yang tidak lagi biasa digunakan kerana pengehadannya berbanding pilihan lain yang tersedia, seperti InnoDB.

Pengoptimuman Pertanyaan

Dalam beberapa kes, mengubah pertanyaan itu sendiri boleh meningkatkan dengan ketara prestasinya. Sebagai contoh, daripada menggunakan klausa had dengan offset yang besar, seperti dalam sampel yang disediakan, adalah lebih cekap untuk menggunakan klausa where. Pertanyaan berikut menunjukkan ini:

select * from `ratings` where id>=499500 limit 500
Salin selepas log masuk

Pertanyaan ini akan menjadi lebih pantas kerana ia menggunakan indeks kunci utama pada lajur id, membenarkan pangkalan data mengakses terus baris yang berkaitan.

Pengecualian Kebuntuan

Selain itu, adalah penting untuk menghapuskan kemungkinan kebuntuan. Kebuntuan berlaku apabila dua atau lebih proses atau utas menunggu antara satu sama lain untuk mengeluarkan sumber yang dipegang, menghalang kedua-duanya daripada berkembang. Dalam senario yang diberikan, tidak mungkin kebuntuan menjadi punca prestasi perlahan, tetapi perlu dipertimbangkan jika isu-isu lain yang berpotensi telah diketepikan.

Dengan menangani faktor seperti pengindeksan, pengoptimuman pertanyaan dan pangkalan data pemilihan enjin, adalah mungkin untuk meningkatkan masa pelaksanaan dengan ketara walaupun pertanyaan kompleks pada pangkalan data yang besar.

Atas ialah kandungan terperinci Mengapa pernyataan MySQL saya lambat apabila menanyakan jadual besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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