Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/04/2011, 19h16   #1
Membre du Club
 
Homme Pascal Castry
Développeur informatique
Inscription : mai 2009
Messages : 102
Détails du profil
Informations personnelles :
Nom : Homme Pascal Castry
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2009
Messages : 102
Points : 68
Points : 68
Envoyer un message via MSN à Pascal26120 Envoyer un message via Skype™ à Pascal26120
Par défaut Index de type full-text

Bonjour.
J'utilise la requête suivante, afin de lister les index d'une table.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
	sys.COLUMNS.name AS COLUMN_NAME,
	sys.indexes.is_primary_key,
	sys.indexes.is_unique
FROM 
	sys.index_columns 
	INNER JOIN sys.objects ON (index_columns.object_id = sys.objects.object_id AND sys.objects.name IN ('MaTable')) 
	INNER JOIN sys.schemas ON sys.schemas.schema_id = sys.objects.schema_id 
	INNER JOIN sys.indexes ON (sys.index_columns .object_id = sys.indexes.object_id AND sys.index_columns.index_id = sys.indexes.index_id)
	INNER JOIN sys.COLUMNS ON (sys.index_columns.column_id = sys.COLUMNS.column_id AND sys.objects.object_id = sys.COLUMNS.object_id)
WHERE 
	sys.objects.type = 'U' OR sys.objects.type = 'V'
ORDER BY
	sys.objects.name ASC
Resultat :

Code :
1
2
3
4
5
 
Id	1	1
Undx	0	1
Ndx	0	0
FTxt	0	1
Cette requête me renvoi parfaitement la liste des index de "MaTable".
Par contre, je ne parviens pas à trouver la colonne qui me permette de différencier les index Full-text des autres.

Merci de votre aide.

Cordialement.
Pascal26120 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 09h31   #2
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Les indexes de texte intégral et les colonnes faisant partie des indexes de texte intégral sont répertoriés dans d'autres tables systèmes :
Code :
1
2
3
sys.fulltext_indexes
sys.fulltext_index_columns
etc..
Exemple : La requête ci-dessous liste les noms des colonnes et tables des indexes de texte intégrale :
Code :
1
2
3
4
5
6
SELECT OBJECT_NAME(ic.object_id) table_name, c.name  column_name  
FROM sys.fulltext_index_columns  ic
INNER JOIN sys.columns c 
  ON ic.object_id = c.object_id 
  AND ic.column_id = c.column_id
GO
A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 20h50   #3
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Après réflexion, et sauf erreur de ma part, pour une table donnée, une colonne qui participe à un index classique, ne participe pas forcément à l'unique index de texte intégrale de la table. Et inversement une colonne qui participe à l'unique index de texte intégrale d'une table ne participe pas forcément à un des indexes classiques de la table.

Donc finalement ta question est mal posée et ne peut être formulée ainsi !

Le script, ci-dessous, que j'ai concocté est incomplet. Il ne montre pas les éventuelles colonnes qui participent à l'unique index de texte intégrale mais qui ne participent à aucun indexes classiques !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT o.name AS Table_Name, o.type, 
       i.name AS index_name, 
       c.name AS Column_Name,
       i.is_primary_key,
       i.is_unique	 , 	   
       CAST((case when ftic.object_id IS NULL then 0 ELSE 1 END) AS bit) AS is_fulltext
FROM sys.index_columns ic 
INNER JOIN sys.objects o 
  ON ic.object_id = o.object_id 
  AND o.name  = 'ProductReview' 
LEFT OUTER JOIN sys.fulltext_index_columns ftic  
  ON ftic.object_id = ic.object_id 
  AND ftic.column_id = ic.column_id 
INNER JOIN sys.schemas s
  ON s.schema_id = o.schema_id 
INNER JOIN sys.indexes i  
  ON ic.object_id = i.object_id 
  AND ic.index_id = i.index_id
INNER JOIN sys.COLUMNS  c  
  ON ic.column_id = c.column_id 
  AND o.object_id = c.object_id    
WHERE o.type IN ('U', 'V')
Résultat :
Code :
1
2
3
4
5
Table_Name	type	index_name	Column_Name	is_primary_key	is_unique	is_fulltext
ProductReview	U 	PK_ProductReview_ProductReviewID	ProductReviewID	1	1	0
ProductReview	U 	IX_ProductReview_ProductID_Name	ProductID	0	0	0
ProductReview	U 	IX_ProductReview_ProductID_Name	ReviewerName	0	0	0
ProductReview	U 	IX_ProductReview_ProductID_Name	Comments	0	0	1
Remarque : La colonne "Comments" ci-dessus, apparaît par chance parce qu'elle fait partie des colonnes INCLUDE (is_Included_Column) d'un index classique (IX_ProductReview_ProductID_Name), sinon elle ne ferait pas partie du résultat !
A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 10h12   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Cela dépend de la version. Sous 2008 (IFTS), pour voir les colonnes indexées, faire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT S.name AS TABLE_SCHEMA, T.name AS TABLE_NAME,
       C.name AS COLUMN_NAME, CT.name AS DOC_TYPE_COLUMN_NAME
FROM   sys.fulltext_index_columns AS FTic
       INNER JOIN sys.TABLES AS T
             ON FTic.object_id = T.object_id
       INNER JOIN sys.schemas AS S
             ON T.schema_id = S.schema_id
       INNER JOIN sys.COLUMNS AS C
             ON FTic.object_id = C.object_id 
             AND FTic.column_id = C.column_id
       LEFT OUTER JOIN sys.COLUMNS AS CT
             ON FTic.object_id = CT.object_id 
                AND  FTic.type_column_id = CT.column_id
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h25.


 
 
 
 
Partenaires

Hébergement Web