sql >> Database teknologi >  >> RDS >> Mysql

Er der nogen mening med at bruge MySQL LIMIT 1, når du forespørger på indekseret/unikt felt?

Er det nogen mening med at bruge MySQL "LIMIT 1", når du forespørger på primærnøgle/entydigt felt?

Det er ikke god praksis at bruge LIMIT 1 når du forespørger med filterkriterier, der er imod enten en primær nøgle eller en unik begrænsning. En primær nøgle eller unik begrænsning betyder, at der kun er én række/post i tabellen med den værdi, kun én række/post vil nogensinde blive returneret. Det er selvmodsigende at have LIMIT 1 på en primær nøgle/entydigt felt - en person, der vedligeholder koden senere, kan tage fejl af vigtigheden og for det andet gætte din kode.

Men den ultimative indikator er forklaringsplanen:

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

... returnerer:

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

...og:

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

... returnerer:

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

Konklusion

Ingen forskel, intet behov. Det ser ud til at være optimeret i dette tilfælde (søger kun mod den primære nøgle).

Hvad med et indekseret felt?

Et indekseret felt garanterer ikke, at den værdi, der filtreres, er unik, der kan være mere end én forekomst. Så LIMIT 1 ville give mening, forudsat at du vil returnere én række.



  1. PDO IN() Array Statement OG en pladsholder

  2. Hvordan installeres postgres med NSIS med alle parametre?

  3. simpel SQL-forespørgsel, der giver Ugyldig brug af gruppefunktion

  4. MySql vælger dynamiske rækkeværdier som kolonnenavne