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.