Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1319 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[SQL] Petit "cours" sur l'optimisation

n°1037850
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-04-2005 à 17:52:52  profilanswer
 

Reprise du message précédent :
red faction > ben à partir de l'interface, ça marche tout seul. sinon, il y a des fonction systèmes qui permettent de gérer les droits dans sql server.

mood
Publicité
Posté le 06-04-2005 à 17:52:52  profilanswer
 

n°1038029
cinocks
Posté le 06-04-2005 à 19:39:48  profilanswer
 

Arjuna a écrit :

cinocks > il y a très peu de "doublons" dans la table contractline. En fait, chaque nouvelle ligne correspond à un avenant à un contrat. Hors, un contrat qui arrive à échéance, dans le mode de fonctionnement de la bdd dans laquelle va tourner ma requête, un nouveau contrat est créé. Donc je dirais que ce "max" va rammener entre 90 et 100% des lignes. Je pense qu'il n'est donc pas utile de le compiler à l'avance.
 
Ensuite, il va y avoir environ 40 000 clients. Chaque client ayant 1 à 5 contrats actifs dans la base, donc ça fait pas mal de lignes à mettre dans la table temporaire.
 
Quand j'aurai les données réelles, je ferais peut-être le test, mais je pense que je vais perdre du temps plutôt qu'en gagner avec le sous-select. En effet, les tables étant bien indexées, le nombre de lignes n'influe que très peu sur la vitesse d'éxécution de la requête. Par contre, dès que le volume de données augmente, l'utilisation de tables temporaire plombe tous les traîtements.


 
Pas forcement. Fais le test à l'occasion. ;) Que le max ramene 90 à 100% des enregistrements n'empeche pas qu'il sera fait un max pour chaque enregistrements de asset. Alors que par une table temporaire, il est fait une fois, et c'est une jointure simple qui sert ensuite.
 
Mais à chacun sa maniere de fonctionner.


---------------
MZP est de retour
n°1038050
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-04-2005 à 19:58:10  profilanswer
 

Bah à la limite, une vue suffit.
 
Cela dit, je te rassure. D'après le plan d'éxécution, SQL Server n'éxécute pas bêtement le max pour chaque ligne, il fait un max une fois pour toute, et effectue la jointure dessus, d'après ce que j'ai vu. Sinon, il aurait parlé de loop, alors que là il ne parle que de join.

n°1038073
Arjuna
Aircraft Ident.: F-MBSD
Posté le 06-04-2005 à 20:18:40  profilanswer
 

J'ai pu me connecter à mon site :D
 
Voilà le code qui génère les requêtes de recherche :
 

Code :
  1. function getFiltreFromKeyWord(keyword, style)
  2. dim mots, tmpstr, errs
  3. if style = "CONTAINS" then
  4.  mots = split(keyword, " " )
  5.  i = 0
  6.  errs = 0
  7.  tmpstr = ""
  8.  do while not i > ubound(mots)
  9.   if len(cleanString2(mots(i))) > 2 then
  10.    if tmpstr <> "" then
  11.     tmpstr = tmpstr & " AND " & getSearchPattern(mots(i))
  12.    else
  13.     tmpstr = tmpstr & getSearchPattern(mots(i))
  14.    end if
  15.   else
  16.    errs = errs + 1
  17.   end if
  18.   i = i + 1
  19.  loop
  20.  if errs = ubound(mots) + 1 then
  21.   getFiltreFromKeyWord = "( ""Nouveau"" ) AND ( ""système"" )  AND ( ""recherche"" )"
  22.  else
  23.   getFiltreFromKeyWord = tmpstr
  24.  end if
  25. else
  26.  getFiltreFromKeyWord = cleanString2(keyword)
  27. end if
  28. end function
  29. function getSearchPattern(keyword)
  30. dim tmpstr
  31. if left(keyword, 1) = "!" then
  32.  tmpstr = "NOT "
  33.  keyword = right(keyword, len(keyword) - 1)
  34. end if
  35. if right(keyword, 1) = "+" then
  36.  keyword = left(keyword, len(keyword) - 1)
  37.  tmpstr = tmpstr & "FORMSOF (INFLECTIONAL, " & cleanString2(keyword) & " )"
  38. elseif right(keyword, 1) = "*" then
  39.  tmpstr = tmpstr & "( """ & cleanString2(keyword) & "*"" )"
  40. else
  41.  tmpstr = tmpstr & "( """ & cleanString2(keyword) & """ )"
  42. end if
  43. getSearchPattern = tmpstr
  44. end function
  45. function cleanString2(str)
  46. dim regExp
  47. set regExp = new regExp
  48. regExp.Pattern = "[^A-Za-z0-9_ ']"
  49. regExp.Global = true
  50. regExp.IgnoreCase = true
  51. cleanString2 = regExp.replace(str, "" )
  52. end function


 
Pour comprendre ce que ça fait, va là :
http://www.manga-torii.com/?page=aiderecherche

n°1038654
rufo
Pas me confondre avec Lycos!
Posté le 07-04-2005 à 11:25:07  profilanswer
 

merci pour le code. Sur le coup, je m'attendais à du code PHP au vue de ce que tu avais écrit précédemment. Mais vu que je dois coder un moteur de recherche reposant sur des mots-clés et des opérateurs ET/OU, ça va m'aider, je pense :)

n°1038932
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-04-2005 à 15:19:00  profilanswer
 

Ben nan, j'avais prévenu que c'était de l'ASP.
Ceci dit, c'est quasiment pareil.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Resolu] Probleme Sql mais comment ?[SQL] recuperer que les chiffres d'un champ
SQL / Informix : Error 297[SQL]Insérer une ligne automatiquement dans une autre table
Comparer date SQL/Date du jourFormulaire html et SQL vers Excel
[SQL] Je sais pas comment formuler mon probleme !apostrophe dans SQL
SQL: mysql_query()Access SQL et la date
Plus de sujets relatifs à : [SQL] Petit "cours" sur l'optimisation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR