Comment indexer une colonne de base de données

J'espère pouvoir obtenir des réponses pour chaque serveur de base de données.

For an outline of how indexing works check out: How does database indexing work?

0
L'un des objectifs déclarés de SO est de s'afficher en premier dans une recherche google. Souvent, une réponse SO est meilleure que les docs eux-mêmes. Ne serait-il pas utile d'établir ici une réponse en tant que wiki communautaire pour rassembler toutes les réponses?
ajouté l'auteur Ethan Reesor, source
Cela semble être une question à laquelle répondraient les docs pour le serveur de base de données que vous utilisez peut-être. Pour Oracle: [ download.oracle. com / docs / cd / B28359_01 / server.111 / b28310 / & hellip;
ajouté l'auteur WW., source
Je n'ai pas obtenu la bonne page lorsque j'ai cliqué sur le lien ci-dessus pour Oracle. Affichage du lien correct: docs.oracle.com/cd/B28359_01 /serveur.111/b28310/indexes003.ht‌ m
ajouté l'auteur Saurabh Patil, source

7 Réponses

Sql Server 2005 vous donne la possibilité de spécifier un index de couverture. Il s'agit d'un index qui inclut des données provenant d'autres colonnes au niveau feuille. Il n'est donc pas nécessaire de revenir à la table pour obtenir les colonnes qui ne sont pas incluses dans les clés d'index.

créer un index non cluster my_idx sur my_table (mon_col1 asc, mon_col2 asc) include (mon_col3);

Ceci est inestimable pour une requête qui a my_col3 dans la liste de sélection, et my_col1 et my_col2 dans la clause where.

0
ajouté

1.

 CREATE INDEX name_index ON Employee (Employee_Name)
  1. On a multi column

    CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age)
    
0
ajouté

Dans SQL Server, vous pouvez effectuer les opérations suivantes: ( Lien MSDN à la version complète liste d'options.)

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON  ( column [ ASC | DESC ] [ ,...n ] ) 
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE  ] 

(en ignorant certaines options plus avancées ...)

Le nom de chaque index doit être unique dans la base de données.

Tous les index peuvent avoir plusieurs colonnes, et chaque colonne peut être commandée dans l'ordre que vous voulez.

Les index clusterisés sont uniques: un par table. Ils ne peuvent pas avoir de colonnes INCLUDE d.

Les index non clusterisés ne sont pas uniques et peuvent avoir jusqu'à 999 par table. Ils peuvent avoir inclus des colonnes et des clauses where.

0
ajouté

Ce qui suit est le standard SQL92 donc devrait être supporté par la majorité des RDMBS qui utilisent SQL:

CREATE INDEX [index name] ON [table name] ( [column name] )
0
ajouté
Dans la plupart des systèmes, cela peut également être utilisé pour avoir plusieurs colonnes, simplement en ajoutant une liste de noms de colonne séparés par des virgules au lieu de la colonne unique.
ajouté l'auteur David Manheim, source

Pour les pytables python, les index n'ont pas de noms et sont liés à des colonnes uniques:

tables.columns.column_name.createIndex()
0
ajouté

Pour créer des index, les choses suivantes peuvent être utilisées:

  1. Creates an index on a table. Duplicate values are allowed:

    CREATE INDEX index_name ON table_name (column_name)

  2. Creates a unique index on a table. Duplicate values are not allowed:

    CREATE UNIQUE INDEX index_name ON table_name (column_name)

  3. Clustered Index

    CREATE CLUSTERED INDEX CL_ID ON SALES(ID);

  4. Non-clustered index

    CREATE NONCLUSTERED INDEX NONCI_PC ON SALES(ProductCode);

se référer http://www.codeproject.com/Articles/190263/ Indexes-in-MS-SQL-Server pour plus de détails.

0
ajouté

Vous ne devez indexer que les colonnes sur lesquelles vous effectuez des recherches / requêtes fréquentes.

Supposons que vous ayez une table nommée Students où vous stockez StudentID, Name, Course, Grade etc. Et vous devez rechercher fréquemment dans la colonne StudentID des informations sur des étudiants spécifiques.

SELECT Name, Course, Grade

FROM Students

WHERE StudentID = 111025

Vous devriez créer un index sur cette colonne, car cela accélérera le processus de recherche. Vous pouvez créer un index sur une colonne existante avec le code suivant:

CREATE INDEX IndexStudentID

ON Students (StudentID)

Le nom IndexStudentID peut être n'importe quoi, choisissez quelque chose qui a du sens pour vous.

Cependant, créer un index ajoutera un peu de surcharge à votre base de données. Il y a beaucoup d'outils qui peuvent aider, par exemple, j'utilise SQLDbm car cela me convient le mieux.

0
ajouté
N'oublie pas non plus la Cardinalité. MONTRER INDEX FROM schema.table; et S'IL VOUS PLAÎT TOUJOURS tester vos Indices après les avoir créés. Essayez également Cardinality (LOW to HIGH) et (HIGH to LOW) pour les index multi-colonnes. Prêter attention à Cardinality peut vous faire économiser beaucoup de temps sur d'énormes bases de données. - en.wikipedia.org/wiki/Cardinality_(SQL_statements)
ajouté l'auteur JayRizzo, source