Question

Dans docs pour différents ORM ils fournissent toujours un moyen de créer des index, etc. Ils mentionnent toujours être sûr de créer les index appropriés pour l'efficacité, comme si c'est la connaissance inhérente à un non-écrit à la main-SQLer qui a besoin d'utiliser un ORM. Ma compréhension des index (en dehors du PK) est essentiellement: Si vous envisagez de faire des requêtes LIKE (c.-à-recherche) en fonction du contenu d'une colonne, vous devez utiliser un index de texte intégral pour cette colonne. Que dois-je savoir au sujet des indices (concernant surtout l'efficacité)? Je me sens comme il y a un monde du savoir à ma porte, mais il y a un énorme tapis de souris plié coincé sous, donc je ne peux pas passer à travers (Je ne sais pas pourquoi je me sentais comme si je devais dire, mais grâce à la fourniture du canapé).

Était-ce utile?

La solution

Pensez à un indice très à peu près comme l'indice dans le dos d'un livre. Il est une zone totalement séparée du contenu du livre, où si vous cherchez une valeur spécifique, vous pouvez aller à l'index et regarder vers le haut (index sont commandés, afin de trouver des choses, il est beaucoup plus rapide que de scanner toutes les pages du livre ).

L'entrée d'index a un numéro de page, vous pouvez alors aller rapidement à la page à la recherche de votre sujet. Un index de base de données est très similaire; il est une liste ordonnée des informations pertinentes dans votre base de données (le champ (s) inclus dans l'indice), avec des informations de la base de données pour trouver les enregistrements qui correspondance.

Alors ... vous créer un index lorsque vous avez des informations que vous devez rechercher sur fréquemment. index normaux ne sont pas vous aider pour « partielle » cherche comme requêtes LIKE, mais chaque fois que vous avez besoin pour obtenir un ensemble de résultats où le champ X a une certaine valeur (s), ils gardent le SGBD d'avoir besoin de « scan » toute la table , à la recherche de valeurs correspondantes.

Ils ont également l'aide lorsque vous devez trier sur une colonne.

Une autre chose à garder à l'esprit; Si le SGBD vous permet de créer des index uniques qui ont plusieurs champs, assurez-vous d'étudier les effets de le faire, spécifique à votre SGBD. Un index qui comprend plusieurs champs est probable que d'être pleinement (ou pas du tout) utile si tous ces champs sont utilisés dans une requête. A l'inverse, comportant plusieurs index pour une table simple, avec un champ par index, peut ne pas être d'une grande partie (ou tout autre) pour les requêtes d'aide qui sont de filtrage / tri par plusieurs champs.


Vous avez mentionné les index de texte intégral et (clés primaires PKs). Ceux-ci sont différents des indices réguliers, mais ils servent souvent similaires.

Tout d'abord, notez que la clé primaire est généralement un indice (en MSSQL, un « index cluster », en fait), mais cela n'a pas besoin d'être le cas en particulier. À titre d'exemple, une MSSQL PK est un index cluster par défaut; index clusterisés sont spéciaux car ils ne sont pas un peu séparé des données stockées ailleurs, mais les données elles-mêmes est disposé dans le tableau de commande par l'index en cluster. C'est pourquoi un PK populaire est une valeur int qui est généré automatiquement avec séquentielle, des valeurs croissantes. Ainsi, un index en cluster trie les données dans le tableau spécifiquement par la valeur du champ. Comparez cela à un dictionnaire traditionnel; les entrées sont eux-mêmes commandés par la « clé », qui est le mot étant défini.

Mais MSSQL (consultez la documentation SGBD pour votre information), vous pouvez modifier l'index en cluster à un autre domaine, si vous le souhaitez. Parfois, cela se fait sur les champs à base de datetime.


index de texte intégral sont différents types de bêtes entièrement. Ils utilisent certains des mêmes principes, mais ce qu'ils font est pas exactement les mêmes que les indices normaux, que je décris. Aussi: dans certains de SGBD, les requêtes LIKE font pas utiliser l'index en texte intégral; opérateurs de requête spéciaux sont nécessaires.

Ces indices sont différents parce que leur intention est de ne pas trouver / trier sur la valeur totale de la colonne (un numéro, une date, un court bit de données char), mais au lieu de trouver les mots / phrases individuelles dans le champ de texte (s) étant indexés.

Ils peuvent aussi permettre souvent à rechercher des mots similaires, différents les temps, les fautes d'orthographe courantes et similaires, et ignorer généralement des mots de bruit. Les différentes façon dont ils travaillent est pourquoi ils peuvent aussi avoir besoin de différents opérateurs de les utiliser. (Encore une fois, consultez la documentation locale pour votre SGBD!)

Autres conseils

Cette réponse est Oracle spécifique, mais les principaux points dans les réponses appliquent à la plupart des systèmes de base de données relationnelle

Comment choisir et optimiser les index oracle?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top