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

Apakah ada gunanya menggunakan MySQL LIMIT 1 saat menanyakan bidang yang diindeks/unik?

Apakah ada gunanya menggunakan MySQL “LIMIT 1” saat menanyakan kunci utama/bidang unik?

Ini bukan praktik yang baik untuk menggunakan LIMIT 1 saat melakukan kueri dengan kriteria filter yang bertentangan dengan kunci utama atau batasan unik. Kunci utama, atau batasan unik, berarti hanya ada satu baris/catatan dalam tabel dengan nilai itu, hanya satu baris/catatan yang akan dikembalikan. Ini bertentangan untuk memiliki LIMIT 1 pada kunci utama/bidang unik--seseorang yang memelihara kode nanti dapat salah mengira pentingnya &menebak kode Anda.

Tapi indikator utamanya adalah rencana penjelasannya:

explain SELECT t.name FROM USERS t WHERE t.userid = 4

...mengembalikan:

id  | select_type | table   | type  | possible_keys  | key      | key_len  |  ref  |  rows  |  Extra
-----------------------------------------------------------------------------------------------------
1   | SIMPLE      | users   | const | PRIMARY        | PRIMARY  | 4        | const | 1      |

...dan:

explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1

...mengembalikan:

id  | select_type | table   | type  | possible_keys  | key      | key_len  |  ref  |  rows  |  Extra
-----------------------------------------------------------------------------------------------------
1   | SIMPLE      | users   | const | PRIMARY        | PRIMARY  | 4        | const | 1      |

Kesimpulan

Tidak ada perbedaan, tidak perlu. Tampaknya dioptimalkan dalam kasus ini (hanya mencari berdasarkan kunci utama).

Bagaimana dengan bidang yang diindeks?

Bidang yang diindeks tidak menjamin keunikan nilai yang difilter, mungkin ada lebih dari satu kemunculan. Jadi LIMIT 1 masuk akal, dengan asumsi Anda ingin mengembalikan satu baris.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbaiki data serial yang rusak karena mengedit database MySQL di editor teks?

  2. LPAD dengan nol di depan

  3. Memformat stempel waktu

  4. Jumlah kolom dalam menggunakan mysqli dan php

  5. MySQL Multiple Where Clause