Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Index Dans SQL [ SQL Server, MSDE, SQL Express / Procédures Stockées ] (crn_c21)

vendredi 24 octobre 2008 à 15:47:51 | Index Dans SQL

crn_c21

Bonjour,

Dans une table SQL 2005, j'ai un champ IdRlt(clè primaire).Dans ce champ, j'ajoute et je supprime des lignes très régulièrement et je dois donc chercher avant de faire une nouvelle insertion le premier identifiant "libre". Dans une procédure stockée, je cherche le premier identifiant libre à partir de 1 et tant que je ne trouve pas , j'incrémente de 1.

Mon problème est que cette table possède plusieurs millions d'enregistrements et que la procédure stockée est très longue .

Quelqu'un aurait-il une autre idée pour rechercher le premier IdRlt "libre"?

Merci de votre aide

dimanche 26 octobre 2008 à 16:47:05 | Re : Index Dans SQL

coq

Administrateur CodeS-SourceS
Salut,

As tu vraiment besoin de combler les trous ?

Si oui, essaie de faire quelquechose autour de cette requête là, basée sur une CTE et ROW_NUMBER (exemple basé sur la table [Person].[Address] de la base AdventureWorks) :

WITH IDsAndRowNumbers AS
(
    SELECT [AddressID] AS ID,
        ROW_NUMBER() OVER (ORDER BY [AddressID] ASC) AS RowNumber
    FROM [Person].[Address]
)
SELECT TOP 1 [ID], [RowNumber]
FROM IDsAndRowNumbers
WHERE [RowNumber]<>[ID]


Cette requête permet de sortir l'ID de la première entrée où le numéro séquentiel généré par ROW_NUMBER est différent du numéro séquentiel de la clé, ce qui indique un gap.
Prévoir ce qu'il faut en sortie pour les cas où aucun gap n'est trouvé, etc etc

Ca devrait mieux tourner qu'un curseur mais je pense qu'en cas d'opérations d'insert intensives tu devras basculer sur une autre stratégie.


/*
coq
MVP Visual C#
CoqBlog
*/

dimanche 26 octobre 2008 à 20:29:40 | Re : Index Dans SQL

crn_c21

Réponse acceptée !
Merci pour cette réponse, je vais approfondir!

le besoin se fait sentir car la base de données est parcouru par un programme VB6(dont nous n'avons plus les sources!! et développer par un bricoleur) où bcp de variables sont déclarées en Integer (donc limité à 32568 me semble-t-il)

Une solution transitoire m'est venu(sous la douche!! lol).Puisque je supprime bcp d'enregistrement,j'ai mis un trigger sur le Deleted qui insert l'Id dans une table annexe. Cette table reprend les Id "libres".

A tester pour voir le gain de temps

Encore merci



Cette discussion est classé dans : table, sql, libre, index, premier


Répondre à ce message

Sujets en rapport avec ce message

sql serveur et not null [ par jimmy69 ] Bonjour,Je debute sous sql serveur et bon j'ai un stress !J'ai cree une table que voici CREATE TABLE T_personnes ( pktest INTEGER IDENTITY(0,1) NOT if dans une procédure stocké ? [ par jesusonline ] Bonjour, je ne connais pas encore SQLj'ai une table articles qui a un champ ID et je voudrais une fonction stocké qui prend en paramètre un ID et qui sql tri?!!! [ par abari ] salut tout le mondej'ai un probléme de tri?!!! dans ma table les enregistrement sont stockées d'une facon des ordonnées comme suit:code nom prénom Ecrire une requette SQL pour affichier les 3 derniers enregistements dans une table Access [ par hotlines ] Bonjour,je voudrais écrire une requette SQL pour afficher  les 3 derniersenregistrement dans une table Access,pour être claire j'ai un site et je voud Droit sur une table sous sql serveur [ par jimmy69 ] Bonjour a tous,Voila je suis en train de me faire un p'tit projet sous sql serveur j'ai realise mon analyse entite relation..... j'ai aussi cree mes t creation d'index sous ms sql serveur ? [ par jimmy69 ] Bonjour a tous, Mes tables sont presque crees sous ms sql serveur 2000...J'avais lu un article sur l'utilite de la creation d' index ...sur les tables Nombre de ligne optimal d'une table? sql server 2000 [ par vindavid38 ] ZanTarBonjour est ce quelqu'un saurait s'il y a une taille optimale (en nombre de ligne) pour une table avec SQL server 2000.??merci bcp de rep@+ sql test si une table contient une foreign key [ par zobbiwan ] Bonjour. Je réalise une appli access asp où je connais le nom de certaines tables filles. Pour laisser une certaine liberté aux utilisateurs, je leur Requete SQL complexe [ par Mindiell ] Bonjour,J'ai un probleme de requete :J'ai une table contenant une societe n°8 par exempleJ'ai une table de personnes : 1, 2, 3, 4, etc...J'ai une autr Lecture de la description de chaque champs d'une table dans une base SQL server 2000 [ par lambdacrash ] Bonjour, Quelle requête dois-je exécuter pour obtenir la description d'un champs nommé contenu dans une table (SQL)? Merci


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.