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

Ha senso usare MySQL LIMIT 1 quando si esegue una query su un campo indicizzato/unico?

Ha senso usare MySQL "LIMIT 1" quando si eseguono query sulla chiave primaria/campo univoco?

Non è buona norma utilizzare LIMIT 1 quando si esegue una query con criteri di filtro rispetto a una chiave primaria oa un vincolo univoco. Una chiave primaria, o vincolo univoco, significa che c'è solo una riga/record nella tabella con quel valore, verrà sempre restituita solo una riga/record. È contraddittorio avere LIMIT 1 su una chiave primaria/campo univoco:qualcuno che manterrà il codice in un secondo momento potrebbe confondere l'importanza e indovinare il tuo codice.

Ma l'indicatore finale è il piano di spiegazione:

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

...restituisce:

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

...e:

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

...restituisce:

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

Conclusione

Nessuna differenza, nessuna necessità. In questo caso sembra essere ottimizzato (ricerca solo sulla chiave primaria).

Che ne dici di un campo indicizzato?

Un campo indicizzato non garantisce l'univocità del valore filtrato, potrebbe esserci più di un'occorrenza. Quindi LIMIT 1 avrebbe senso, supponendo che tu voglia restituire una riga.