2009-09-20 5 views
0

Je construis une base de données assez volumineuse - qui compte environ 6,9 millions d'enregistrements. Un simple choix prend 6-7 secondes, donc je travaille maintenant sur l'optimisation et l'étude d'autres options.Comment utiliser les index dans SQL

Une solution évidente consiste à créer un index ou deux.

Exemple:

CREATE INDEX "INDEX_NAME" ON "TABLE_NAME" (COLUMN_NAME)

Cela a bien fonctionné.

Cependant, je ne peux pas obtenir une syntaxe SQL valide pour utiliser l'index dans une instruction select. On suppose que vous pouvez utiliser "select index_name from table_name", bien au moins je l'ai fait :) Cependant, il semble être invalide, et je ne peux pas pour la vie de moi trouver un exemple sur le net, ce qui implique soit que je viens du mauvais angle totalement, ou personne ne l'a documenté ...

Toute aide sur l'utilisation des indices serait appréciée!

+0

Avez-vous une clé primaire sur la table? Si vous le faites, la clé primaire créera un index clusterisé sur la table. Et si vous avez un autre index unique sur la table va créer un index non clusterisé sur la table. Une autre chose affecterait votre performance serait la taille de votre champ indexé. Plus la taille est réduite, plus la recherche ou la jointure est rapide car cela affecte les lignes de données réelles sur une page de données. – Nirlep

Répondre

4

Vous n'avez pas besoin de spécifier explicitement les index que vous souhaitez la base de données à utiliser. L'optimiseur de base de données examinera ce qu'il sait sur les index et les algorithmes disponibles pour répondre à votre requête, et (espérons-le) sélectionner le meilleur plan pour la tâche à accomplir.

Vous avez juste besoin de sélectionner votre table comme avant; la base de données "fera la bonne chose" automatiquement. Parce que l'optimiseur est un peu opaque même pour les développeurs les plus expérimentés, il est important lors du développement de requêtes d'examiner le "plan d'exécution" généré pour eux. Vous pouvez voir le plan en utilisant la saveur de la base de données de la commande EXPLAIN.

Il est possible d'installer les bons index. Voici un exemple récent qui passe en revue quels algorithmes et combinaisons d'index sont les meilleurs pour certains types de sélections sur la base de données MySQL: http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/ Ceci est probablement un peu trop avancé pour vous être utile en ce moment, mais lisez-le pour avoir une idée de le genre de choses que l'optimiseur essaie de comprendre pour vous.

0

Je pense que cela dépend du type de base de données que vous utilisez, mais pour mon expérience avec SQL Server (2000, 2005, 2008), je n'ai pas vraiment à me soucier du nom de l'index. Vous le créez simplement sur des colonnes que vous pouvez souvent utiliser comme filtres dans vos requêtes (clause WHERE ou jointures), puis faites vos requêtes normalement. Le serveur de base de données prendra soin d'utiliser l'index chaque fois qu'il pense qu'il peut aider.

Hope this helps

1

Je ne pense pas que vous comprenez comment fonctionnent les index. Vous effectuez une sélection sur une colonne indexée de la même manière que vous effectuez une sélection sur une colonne indexée.

0

La base de données utilisera les indices sans que vous le disiez. C'est ce que fera l'optimiseur de requêtes.

Regardez le plan de requête - par exemple pour Sybase et os-sql server set showplan select .....

Cela montrera si un index est utilisé

Sur les occasions étranges que vous faites besoin de forcer les index, mais cela est rare

2

SQL Server essaiera de détermine quel index sera le meilleur pour la requête que vous avez écrite. Cela sera fait à l'aide des statistiques qu'il a sur les différents indices. (Vous pouvez avoir plus d'un index par table, mais vous devez limiter le nombre d'index que vous créez)

Vous pouvez également créer quelque chose qui s'appelle un index de couverture. C'est un index qui aura tous les champs pour une requête. Cela permet à SQL Server d'interroger uniquement l'index et non la table qu'il indexe. Vous avez également la possibilité de créer un indice dans une requête pour forcer SQL Server à préférer un index plutôt qu'un autre, mais vous ne devez pas utiliser cette option et garder vos statistiques à jour sur l'index.

espoir qui aide

2

Si vous utilisez MySQL, vous pouvez spécifier quel index utiliser ou ne pas utiliser.

SELECT * FROM table1 USE INDEX (col1_index,col2_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

SELECT * FROM table1 IGNORE INDEX (col3_index) 
    WHERE col1=1 AND col2=2 AND col3=3; 

Vous trouverez plus d'informations ici: http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

Warren Brian Noronha

Questions connexes