Anda berada di bufet, dan semuanya kelihatan lazat. Tetapi daripada mengambil pinggan dan mengambil apa yang anda perlukan, anda mula menimbun makanan dari setiap sudut, membuat kekacauan dan memperlahankan diri anda. Hasilnya? Anda terlebih beban dan tidak cekap.
Itulah yang berlaku apabila pertanyaan SQL tidak dioptimumkan! Mereka memuatkan data yang tidak diperlukan, memperlahankan segala-galanya dan membuat huru-hara dalam pangkalan data anda.
Tetapi jangan takut! Sama seperti mempelajari cara mengatur kadar diri anda di bufet, mengoptimumkan pertanyaan SQL boleh memastikan perkara berjalan lancar. Mari kita mendalami cara anda boleh menjadikan prestasi pangkalan data anda lebih pantas berbanding sebelum ini—dan elakkan keadaan huru-hara!
Bayangkan anda membeli-belah di kedai dan juruwang bertanya, "Adakah anda mahukan semua yang ada di kedai atau hanya apa yang anda perlukan?" Bunyinya tidak masuk akal, bukan? Nah, itulah yang berlaku apabila anda menggunakan " SELECT * " dalam SQL. Anda meminta semua lajur, malah yang anda tidak perlukan, dan itu adalah resipi untuk prestasi perlahan.
Sebaliknya:
SELECT * FROM Customers;
Gunakan:
SELECT CustomerName, Email FROM Customers;
Dengan memilih hanya lajur yang diperlukan, anda mengurangkan data yang perlu diproses oleh pertanyaan anda.
Fikirkan klausa WHERE sebagai GPS pangkalan data anda. Ia membantu anda menavigasi terus ke perkara yang anda cari, dan bukannya menapis segala-galanya. Lebih spesifik penapis anda, semakin kurang kerja pangkalan data anda perlu lakukan.
Contoh: Jika anda hanya memerlukan pelanggan dari California, jangan buat carian pangkalan data melalui semua orang.
SELECT CustomerName, Email FROM Customers WHERE State = 'California';
Dengan cara ini, anda mengecilkan kolam dan mempercepatkan carian anda.
Menyertai jadual ialah tugas biasa dalam SQL, tetapi gabungan yang tidak cekap boleh menyeret prestasi anda ke lorong perlahan. Apabila menggabungkan jadual, sentiasa pastikan anda menyertai pada lajur diindeks dan hadkan data yang diproses oleh setiap jadual sebelum gabungan itu berlaku.
Contoh Penyertaan yang Baik:
SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID WHERE Customers.State = 'California';
Dalam kes ini, kami menyertai jadual Pesanan dan Pelanggan pada CustomerID dan menggunakan klausa WHERE untuk mengehadkan bilangan baris yang perlu dilalui oleh penyertaan. Hasilnya? Pertanyaan yang lebih pantas.
Indeks dalam pangkalan data adalah seperti indeks buku. Daripada menyelak setiap halaman untuk mencari perkara yang anda cari, anda boleh melompat ke tempat yang betul. Apabila digunakan dengan betul, indeks boleh meningkatkan prestasi pertanyaan secara drastik dengan membantu pangkalan data mencari baris dengan lebih cekap.
Cara Menggunakan Indeks:
Lajur indeks yang anda kerap gunakan dalam fasal WHERE.
Apabila anda menapis data dalam SQL dengan klausa WHERE, pangkalan data mesti mencari melalui baris untuk mencari data yang sepadan. Jika anda mencipta indeks pada lajur yang digunakan dalam klausa WHERE anda, pangkalan data boleh melompat terus ke baris yang berkaitan dan bukannya mengimbas keseluruhan jadual.
*Contoh: * Katakan anda mempunyai jadual pelanggan dan anda sering mencari pelanggan berdasarkan keadaan mereka:
SELECT * FROM Customers;
Dengan menambahkan indeks pada lajur Negeri, pertanyaan anda boleh dilaksanakan dengan lebih pantas:
SELECT CustomerName, Email FROM Customers;
Kini, setiap kali anda menapis pelanggan mengikut Negeri, pangkalan data akan menggunakan indeks ini untuk mempercepatkan carian.
Lajur indeks yang digunakan dalam cantuman (klausa HIDUP).
Sertai menggabungkan data daripada berbilang jadual berdasarkan lajur yang berkaitan dan lajur ini boleh mendapat manfaat daripada pengindeksan. Apabila anda menyertai jadual menggunakan klausa HIDUP, mengindeks lajur yang terlibat dalam menyertai boleh meningkatkan prestasi dengan ketara.
Contoh: Anda mempunyai dua jadual: Pesanan dan Pelanggan, dan anda kerap menyertainya berdasarkan ID Pelanggan:
SELECT CustomerName, Email FROM Customers WHERE State = 'California';
Membuat indeks pada CustomerID dalam kedua-dua jadual boleh menjadikan ini menyertai lebih pantas:
SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID WHERE Customers.State = 'California';
Dengan melakukan ini, pangkalan data tidak perlu melakukan imbasan jadual penuh pada kedua-dua jadual untuk memadankan ID pelanggan. Ia boleh menggunakan indeks untuk mencari baris yang sepadan dengan cepat.
Bila Menggunakan Indeks
Gunakan indeks pada lajur yang anda kerap cari, tapis atau isih (WHERE, ORDER BY).
Indeks kunci asing dalam operasi sertai untuk meningkatkan prestasi.
Berhati-hati untuk tidak mengindeks berlebihan, kerana terlalu banyak indeks boleh melambatkan operasi MASUKKAN, KEMASKINI dan PADAM.
Mari kita bincangkan tentang masalah pertanyaan N 1—ia adalah versi pangkalan data kematian dengan seribu potongan. Ia berlaku apabila satu pertanyaan diikuti oleh berbilang pertanyaan lain, satu untuk setiap hasil pertanyaan awal. Ini boleh membawa kepada ratusan atau ribuan pertanyaan tambahan!
Contoh Buruk:
SELECT * FROM Customers WHERE State = 'California';
Ini boleh mengakibatkan ratusan pertanyaan individu. Sebaliknya, kumpulan pertanyaan anda untuk mengendalikan semua data sekaligus.
Versi Dioptimumkan:
CREATE INDEX idx_state ON Customers(State);
Kini, anda hanya menjalankan satu pertanyaan dan bukannya ratusan!
Jika anda menjalankan pertanyaan yang menarik sejumlah besar data, adalah idea yang baik untuk memecahkannya kepada bahagian yang lebih kecil menggunakan LIMIT atau teknik penomboran. Bayangkan meminta pangkalan data anda untuk keseluruhan buku telefon apabila anda hanya perlukan 10 entri pertama—kedengarannya gila, bukan?
Contoh dengan Had:
SELECT * FROM Customers;
Pendekatan ini mengambil hanya 10 rekod pada satu masa, memastikan sistem anda tidak tercekik terlalu banyak data sekaligus.
Ingin tahu apa yang pangkalan data anda fikirkan apabila ia menjalankan pertanyaan anda? Gunakan EXPLAIN atau EXPLAIN ANALYZE. Arahan ini mendedahkan pelan pelaksanaan pertanyaan, menunjukkan kepada anda cara pangkalan data memproses permintaan anda. Ia seperti mengintip di bawah tudung untuk melihat di mana penambahbaikan boleh dilakukan.
Contoh:
SELECT CustomerName, Email FROM Customers;
Jika anda melihat perkara seperti "Imbasan Meja Penuh" dalam hasil carian, ini menandakan bahawa penambahan indeks boleh membantu mempercepatkan perkara.
Sama seperti kereta anda memerlukan penukaran minyak, pangkalan data anda memerlukan penyelenggaraan yang kerap. Gunakan arahan seperti VACUUM (dalam PostgreSQL) atau OPTIMIZE JADUAL (dalam MySQL) untuk memastikan perkara berjalan lancar dengan mengosongkan baris mati dan menyusun semula data.
Contoh:
SELECT CustomerName, Email FROM Customers WHERE State = 'California';
Ini memastikan pangkalan data anda bersih dan menghalang kelembapan yang disebabkan oleh data berpecah-belah.
Mengoptimumkan SQL pertanyaan tidak semestinya memeningkan kepala. Dengan mengambil kira data yang anda tarik, menggunakan indeks secara strategik dan menggunakan alatan seperti JELASKAN, anda boleh mengubah pertanyaan anda dan mempercepatkan prestasi pangkalan data anda. Layan pangkalan data anda seperti dapur yang tersusun dengan baik, di mana segala-galanya mudah dicari dan tiada masa terbuang untuk mencari apa yang anda perlukan. Percayalah, pangkalan data anda (dan pengguna) akan berterima kasih kepada anda!
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Pertanyaan SQL untuk Prestasi Pangkalan Data yang Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!