2008-08-04 6 views
47

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

Pour un aperçu du fonctionnement de l'indexation de départ: How does database indexing work?

+0

Cela semble être une question à laquelle les documents relatifs au serveur de base de données que vous utilisez pourraient répondre. Pour Oracle: [http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/indexes003.htm](Oracle) –

+0

Je n'ai pas obtenu la bonne page lorsque j'ai cliqué sur le lien ci-dessus pour Oracle . Affichage du lien correct: http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm –

+4

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? –

Répondre

53

Ce qui suit est la norme SQL92 devraient donc être soutenues par la majorité des SGBDR qui utilisent SQL:

CREATE INDEX [index name] ON [table name] ([column name]) 
+2

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. –

6

Sql Server 2005 vous donne la possibilité de spécifier un indice 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.

4

Pour pytables python, les index ne sont pas ont des noms et ils sont liés à des colonnes:

tables.columns.column_name.createIndex() 
4

Dans SQL Server, vous pouvez faire ce qui suit: (. MSDN Link à la liste complète des options)

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

(sans tenir compte des options plus avancées ...)

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

Tous les index peuvent avoir plusieurs colonnes et chaque colonne peut être triée dans l'ordre de votre choix.

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

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

2

Pour créer des index suivants choses peuvent être utilisés:

  1. crée un index sur une table. Les valeurs en double sont autorisés:

    CREATE INDEX nom_index ON nom_table (nom_colonne)

  2. crée un index unique sur une table.Les valeurs en double ne sont pas autorisés:

    UNIQUE INDEX nom_index CREER SUR nom_table (nom_colonne)

  3. Index cluster

    CREER CLUSTERED INDEX CL_ID SUR LES VENTES (ID);

  4. index non cluster

    CREATE INDEX NONCLUSTERED NONCI_PC SUR LES VENTES (ProductCode);

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

1

1.

CREATE INDEX name_index ON Employee (Employee_Name) 
  1. Sur plusieurs colonnes

    CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age) 
    
0

Vous ne devez indexer les colonnes sur lesquelles vous effectuez une recherche fréquente/requêtes. 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 devez 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 quelque chose, choisissez quelque chose qui ont du sens pour vous. Toutefois, la création d'un index ajoutera une surcharge à votre base de données. Il y a beaucoup d'outils qui peuvent aider, par exemple, j'utilise SQLDbm car je me sens le meilleur.

Questions connexes