Nous avons une table avec des millions de lignes. Récemment, nous avons introduit un entier pour agir comme une clé secondaire, qui est simplement une colonne d'entiers uniques nouvel_identifiant = 1100327
et qui n'est pas encore définie comme une clé primaire secondaire.
Cette requête de recherche prend environ 6 secondes dans tinker. $this->id_lookup
est également un entier. et jusqu'à 50 secondes sur horizon!
DB::table('ma_grande_table')->where('nouvel_identifiant', $this->id_lookup)->get();
Comment pouvons-nous obtenir les mêmes performances que DB::table('ma_grande_table')->find($this->id_lookup);
qui est presque instantanée?
Pouvons-nous introduire une deuxième clé primaire avec quelque chose comme $table->key(['id', 'nouvel_identifiant']);
?
Comment cela affecterait-il d'autres recherches comme MyBigTable::find($id);
qui est effectuée ailleurs?
Mise à jour - changer la colonne de entier en index a réduit le temps de recherche de 50s à <0.01s
1 votes
Peut-être PARTITIOns.
0 votes
C'est ce que nous pensons. Nous avons une deuxième table avec le même nombre d'enregistrements et la recherche par hachage de 32 caractères est presque instantanée.