Rumah  >  Artikel  >  pangkalan data  >  Analisis ringkas tentang sintaks dan batasan biasa mysql dalam pertanyaan

Analisis ringkas tentang sintaks dan batasan biasa mysql dalam pertanyaan

PHPz
PHPzasal
2023-04-17 16:45:011509semak imbas

MySQL ialah sistem pengurusan pangkalan data hubungan yang sangat popular Salah satu bahasa yang paling banyak digunakan ialah SQL Melalui pernyataan SQL, kami boleh melaksanakan pelbagai operasi data yang kompleks. Dalam MySQL, pertanyaan dalam ialah kaedah pertanyaan yang sangat biasa Ia boleh menanyakan rekod dalam lajur yang ditentukan yang sepadan dengan syarat pertanyaan (iaitu, nilai selepas dalam Berbanding dengan pertanyaan OR berbilang dengan syarat yang sama, The in pertanyaan lebih ringkas dan jelas.

Tetapi dalam pembangunan sebenar, kita selalunya perlu membuat beberapa sekatan pada pertanyaan untuk mengelakkan ralat atau meningkatkan kecekapan pertanyaan. Di bawah, kami akan membincangkan beberapa batasan umum dalam pertanyaan.

1. Dalam sintaks dan prinsip pertanyaan

Sebelum kita mula menerangkan batasan dalam pertanyaan, mari kita fahami sintaks dan prinsip dalam pertanyaan. Sintaks

dalam pertanyaan adalah seperti berikut:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

Contohnya, tanya maklumat pesanan dengan nombor barang 1, 3 dan 5 dalam jadual pesanan:

PILIH * DARI pesanan DI MANA barang_id IN (1,3,5);

dalam Prinsip pertanyaan adalah seperti berikut :

  • MySQL akan membuka jadual hash (jadual Hash) dalam ingatan untuk menyimpan semua nilai yang memenuhi keperluan.
  • Semasa proses mengimbas jadual, MySQL mengeluarkan setiap baris dalam jadual, mengekstrak nilai lajur yang perlu digunakan dan menyemak sama ada ia sama dengan sebarang nilai dalam jadual cincang .
  • Jika ia memenuhi syarat, ia akan ditambah ke set keputusan.

Jadi, kecekapan dalam pertanyaan dipengaruhi oleh banyak faktor seperti bilangan keadaan pertanyaan, saiz jadual cincang memori dan bilangan rekod dalam jadual. Seterusnya, kami akan menerangkan batasan dalam pertanyaan.

2. Dalam had pertanyaan

1 Terlalu banyak dalam keadaan pertanyaan

Semakin banyak dalam keadaan pertanyaan, semakin besar memori yang diduduki oleh jadual cincang MySQL lebih perlahan. Oleh itu, dalam pembangunan sebenar, kita harus mengelak daripada menggunakan terlalu banyak dalam keadaan pertanyaan. Jika terdapat terlalu banyak syarat pertanyaan, anda boleh mengoptimumkan pertanyaan dengan memisahkan berbilang dalam keadaan pertanyaan dan menggunakan subkueri.

Contohnya, untuk menanyakan maklumat pesanan dengan nombor barang 1, 3, 5, 7, dan 9 dalam jadual pesanan, anda boleh menulis seperti ini:

PILIH * DARI pesanan WHERE goods_id IN (1,3, 5) ATAU goods_id IN (7,9);

Atau:

PILIH * DARI pesanan DI MANA barang_id DI (PILIH id DARI barang DI MANA id dalam (1,3 ,5,7,9 ));

Dengan cara ini, kita boleh membahagikan syarat pertanyaan untuk meningkatkan kecekapan pertanyaan.

2. Diulang dalam keadaan pertanyaan

Dalam dalam pertanyaan, jika syarat pertanyaan diulang, kecekapan pertanyaan akan berkurangan dan boleh menyebabkan data pendua dalam set hasil. Oleh itu, apabila menulis dalam keadaan pertanyaan, kita harus mengelakkan syarat pertanyaan berulang.

Sebagai contoh, untuk menanyakan maklumat pesanan dengan nombor barang 1, 1, 3, 5, dan 7 dalam jadual pesanan, anda boleh menulis seperti ini:

PILIH * DARI pesanan WHERE goods_id IN (1,3, 5,7);

Dengan cara ini, kita boleh mengelakkan keadaan pertanyaan berulang dan meningkatkan kecekapan pertanyaan.

3. Keadaan dalam pertanyaan kosong

Jika keadaan dalam pertanyaan tidak mengandungi sebarang nilai, semua data dalam jadual akan disoal. Ini akan menyebabkan kecekapan pertanyaan berkurangan dan data yang tidak diperlukan mungkin muncul Oleh itu, apabila menulis dalam keadaan pertanyaan, kita harus mengelakkan syarat pertanyaan kosong.

Sebagai contoh, untuk menanyakan maklumat pesanan dengan nombor barang 1, 3, 5, dan 7 dalam jadual pesanan, anda boleh menulis seperti ini:

PILIH * DARI pesanan DI MANA barang_id IN ( 1,3,5, 7);

Dengan cara ini, kita boleh mengelakkan keadaan pertanyaan kosong dan meningkatkan kecekapan pertanyaan.

4. Jenis keadaan dalam pertanyaan tidak sepadan

Apabila melakukan pertanyaan dalam, jenis syarat pertanyaan mesti sepadan dengan jenis lajur dalam jadual, jika tidak, pertanyaan akan gagal . Oleh itu, apabila menulis dalam keadaan pertanyaan, kita harus memastikan bahawa jenis keadaan pertanyaan sepadan dengan jenis lajur dalam jadual.

Sebagai contoh, untuk menanyakan maklumat pesanan dengan nombor barang 1, 3, 5, dan 7 dalam jadual pesanan, anda boleh menulis seperti ini:

PILIH * DARI pesanan DI MANA barang_id IN ( 1,3,5, 7);

Dengan cara ini, kami boleh memastikan bahawa jenis keadaan pertanyaan sepadan dengan jenis lajur dalam jadual untuk mengelakkan kegagalan pertanyaan.

5. Gunakan dalam pertanyaan dan "bukan dalam" pada masa yang sama

Apabila dalam pertanyaan dan "tidak dalam" digunakan pada masa yang sama, kecekapan pertanyaan akan berkurangan. Oleh itu, dalam pembangunan sebenar, kita harus mengelak daripada menggunakan dalam pertanyaan dan "bukan dalam" pertanyaan pada masa yang sama.

Sebagai contoh, untuk menanyakan maklumat pesanan barang nombor 1, 3, 5, dan 7 dalam jadual pesanan, tetapi tidak termasuk maklumat pesanan barangan nombor 9, anda boleh menulis seperti ini:

PILIH * DARI pesanan WHERE goods_id IN (1,3,5,7) AND goods_id NOT IN (9);

Dengan cara ini, kita boleh mengelak daripada menggunakan dalam query dan "not in" query pada masa yang sama, meningkatkan kecekapan pertanyaan.

3. Ringkasan

Melalui pengenalan artikel ini, kami memahami prinsip tatabahasa dan batasan umum dalam pertanyaan. Dalam pembangunan sebenar, kita harus mengelak daripada menggunakan terlalu banyak syarat pertanyaan, mengelakkan pertindihan syarat pertanyaan, mengelakkan keadaan pertanyaan kosong, memastikan jenis syarat pertanyaan sepadan dengan jenis lajur dalam jadual, dan mengelakkan penggunaan dalam pertanyaan dan "bukan" di masa yang sama mengikut keadaan tertentu dalam pertanyaan untuk meningkatkan kecekapan pertanyaan dan mengurangkan kemungkinan ralat pertanyaan.

Atas ialah kandungan terperinci Analisis ringkas tentang sintaks dan batasan biasa mysql dalam pertanyaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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