sql >> Databasteknik >  >> RDS >> Mysql

Är det någon mening med att använda MySQL LIMIT 1 när man frågar på indexerat/unikt fält?

Finns det någon mening med att använda MySQL "LIMIT 1" när du frågar efter primärnyckel/unikt fält?

Det är inte bra att använda LIMIT 1 när du frågar med filterkriterier som är mot antingen en primärnyckel eller unik begränsning. En primärnyckel, eller unik begränsning, betyder att det bara finns en rad/post i tabellen med det värdet, endast en rad/post kommer någonsin att returneras. Det är motsägelsefullt att ha LIMIT 1 på en primärnyckel/unikt fält--någon som underhåller koden senare kan missta vikten och för det andra gissa din kod.

Men den ultimata indikatorn är förklaringsplanen:

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

...retur:

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

...och:

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

...retur:

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

Slutsats

Ingen skillnad, inget behov. Det verkar vara optimerat i det här fallet (söker bara mot primärnyckeln).

Vad sägs om ett indexerat fält?

Ett indexerat fält garanterar inte att värdet som filtreras är unikt, det kan finnas mer än en förekomst. Så LIMIT 1 skulle vara vettigt, förutsatt att du vill returnera en rad.



  1. Varför skulle MySQL köra return None?

  2. Jag vill kontrollera om posten finns och om den inte existerar så vill jag infoga den posten i databasen med golang

  3. Hur man konsekvent tjänar en Microsoft Access MVP Award

  4. Hur får jag en kolumn med på varandra följande, ökande siffror, utan att några siffror saknas?