4 votes

Recherche rapide d'entier Laravel ?

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.

4voto

mrhn Points 2499

Vous pouvez créer un index, procédez comme suit dans une migration.

Schema::table('my_big_table', function (Blueprint $table) {
    $table->index('new_identifier');
});

Un index peut vous aider, mais les index de clé primaire sont spéciaux, ils sont regroupés. Cela signifie qu'ils contiennent toutes les données sur la clé suivante. Alors que les index secondaires ne sont pas regroupés, ils ne contiendront que les colonnes indexées et la colonne de la clé primaire. Cela améliorera toujours les performances, mais c'est un domaine où vous devez faire beaucoup de recherches sur l'impact des différents index sur les requêtes et ce n'est pas du tout noir et blanc.

0 votes

Cela pourrait être une autre question, mais est-ce que les index unique sont plus performants que simplement les index index ?

0 votes

Je suis sûr que vous devez relire le manuel lorsque j'ai lu votre déclaration sur les index secondaires -> " Tous les index autres que l'index cluster sont appelés des index secondaires. Dans InnoDB, chaque enregistrement dans un index secondaire contient les colonnes de clé primaire pour la ligne, ainsi que les colonnes spécifiées pour l'index secondaire. InnoDB utilise cette valeur de clé primaire pour rechercher la ligne dans l'index cluster. Si la clé primaire est longue, les index secondaires utilisent plus d'espace, il est donc avantageux d'avoir une clé primaire courte. "

0 votes

Est-ce que index est représenté par bigInt?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X