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

 


Débat n°1




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  20  21  22  23  24  25
Auteur Sujet :

BlaBla@SQL

n°1968001
drasche
Posté le 21-02-2010 à 23:30:37  profilanswer
 

Reprise du message précédent :

Harkonnen a écrit :

Oui, le SELECT * est très très lent. Le SELECT tous_les_champs doit toujours être préféré
(en gros, lors d'un SELECT *, le SGBD passe en revue toute la table pour connaitre ses colonnes avant de les retourner, alors qu'il les connait déjà dans le cas d'un SELECT tous_les_champs, d'ou gain de temps)


[:kiki] [:kiki] [:kiki]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
mood
Publicité
Posté le 21-02-2010 à 23:30:37  profilanswer
 

n°1968003
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-02-2010 à 23:34:05  profilanswer
 

mareek a écrit :


Tu peux chiffrer la différence entre un "select *" et un "select tous, les, champs" dans le cas général ou donner des exemples concrets ? "très lent" et "gain de temps" c'est un peu vague quand même.


je saurais pas te chiffrer exactement, mais je me souviens d'une grosse requête sur Rankmill qui avait facilement gagné 5 secondes en virant le "*". je regarderais demain si je peux bencher ça :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968006
drasche
Posté le 21-02-2010 à 23:45:09  profilanswer
 

Harkonnen a écrit :

je saurais pas te chiffrer exactement, mais je me souviens d'une grosse requête sur Rankmill qui avait facilement gagné 5 secondes en virant le "*". je regarderais demain si je peux bencher ça :o


Ah.

 

Ouais.

 

OK.

 

T'avais 10.000 champs dans la requête, c'est ça? [:petrus75]

 

edit: en fait c'est pas le fait de lister les champs explicitement au lieu de l'étoile qui ralentit ton bouzin, c'est que si tu commences à ramener tous les champs d'une requête multi-jointurée au lieu de prendre strictement que les champs dont tu as réellement besoin, forcément ça va prendre plus de temps avec un SELECT * :o

Message cité 1 fois
Message édité par drasche le 21-02-2010 à 23:47:14

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1968007
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-02-2010 à 23:50:09  profilanswer
 

drasche a écrit :


Ah.
 
Ouais.
 
OK.
 
T'avais 10.000 champs dans la requête, c'est ça? [:petrus75]


non, étron [:kiki]
juste pas mal de clauses where et un Sum() il me semble :o
 
je viens de faire le test sur une requête maison. un bête SELECT * sur une table comportant 9 champs et 166000 lignes (3 int, 3 bigint et 3 nvarchar(max)) => 754 ms
la même requête en nommant les champs => 112 ms
 
7 fois plus rapide, la messe est dite : SELECT * puxxor


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968016
Jubijub
Parce que je le VD bien
Posté le 22-02-2010 à 00:41:18  profilanswer
 

c'est cross SGBD comme remarque, ou c'est propre à SQL server ?


---------------
Jubi Photos : Flickr - 500px
n°1968019
skeye
Posté le 22-02-2010 à 07:12:25  profilanswer
 

Jubijub a écrit :

c'est cross SGBD comme remarque, ou c'est propre à SQL server ?


Probablement différent suivant les sgbd, mais * est forcément moins rapide. Les chiffres d'harko m'étonnent, quand même.:o


Message édité par skeye le 22-02-2010 à 07:13:32

---------------
Can't buy what I want because it's free -
n°1968030
Shinuza
This is unexecpected
Posté le 22-02-2010 à 08:44:16  profilanswer
 

Benchez-donc.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1968033
skeye
Posté le 22-02-2010 à 09:10:52  profilanswer
 

Shinuza a écrit :

Benchez-donc.


 
Oracle 10, table de 130K enregistrements environ, j'en retourne à peu près 11K :
 

Code :
  1. <?php
  2.  
  3. $sql = "select * from adresse where cod_anu_ina = 2008";
  4. $sql2 = "select adr_mail, cod_adr, cod_anu_ina, cod_bdi, cod_com, cod_ind,
  5.             cod_ind_ina, cod_pay, lib_ad1, lib_ad2, lib_ad3, lib_ade, num_tel, num_tel_port
  6.         from adresse where cod_anu_ina = 2008";
  7.  
  8. $user = "xxx";
  9. $passwd = "xxx";
  10. $base = "xxx";
  11.  
  12. $conn  = oci_connect($user,$passwd,$base) or die('erreur de connexion');
  13.  
  14. $start1 = microtime(true);
  15. $stmt = oci_parse($conn, $sql);
  16. $result = oci_execute($stmt);
  17. $end1 = microtime(true);
  18.  
  19. echo 'étoile : ', $end1 - $start1, PHP_EOL;
  20.  
  21. $start2 = microtime(true);
  22. $stmt2 = oci_parse($conn, $sql2);
  23. $result2 = oci_execute($stmt2);
  24. $end2 = microtime(true);
  25.  
  26. echo 'liste des champs : ', $end2 - $start2, PHP_EOL;


 
 

Citation :


etoile : 0.037775039672852
liste des champs : 0.036669969558716


 
Pas de quoi s'énerver, quoi.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1968036
casimimir
Posté le 22-02-2010 à 09:16:05  profilanswer
 

perso je ne pense pas que cela ait plus d'impact qu'éventuellement quelques accès supplémentaires au dictionnaire.
 
il faut faire gaffe avec des benchs consécutifs sur  les mêmes données, pour la 1ère requête il va faire ses i/o, alors que pour la 2ème utiliser la mise en cache des pages de la 1ère requête

n°1968037
skeye
Posté le 22-02-2010 à 09:17:56  profilanswer
 

casimimir a écrit :

il faut faire gaffe avec des benchs consécutifs sur  les mêmes données, pour la 1ère requête il va faire ses i/o, alors que pour la 2ème utiliser la mise en cache des pages de la 1ère requête


Ouais enfin si tu benches pas les mêmes ça devient difficile de comparer, aussi.[:joce]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 22-02-2010 à 09:17:56  profilanswer
 

n°1968039
casimimir
Posté le 22-02-2010 à 09:22:36  profilanswer
 

Ben alors faut le faire trois fois, une fois pour ramener dans le buffer, puis tes deux séries de test.
 
ou dupliquer avant.

n°1968040
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-02-2010 à 09:22:41  profilanswer
 

pour mon précédent bench d'hier soir, en fait j'ai reconstruit les indexes et updaté les stats, et j'arrive à 25 ms pour * et 21 ms pour tous les champs [:petrus75]
 
bench plus rigoureux sous SQL Server à l'instant : sélection des 7 champs d'une view , constituée de 5 jointures. retourne 564 733 lignes
 
SELECT * : 743 ms
tous les champs :387 ms


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968041
skeye
Posté le 22-02-2010 à 09:25:38  profilanswer
 

casimimir a écrit :

Ben alors faut le faire trois fois, une fois pour ramener dans le buffer, puis tes deux séries de test.

 

ou dupliquer avant.

 

Mes chiffres plus haut ont été reproduits plusieurs fois de suite.


Message édité par skeye le 22-02-2010 à 09:25:45

---------------
Can't buy what I want because it's free -
n°1968042
skeye
Posté le 22-02-2010 à 09:26:05  profilanswer
 

Harkonnen a écrit :

pour mon précédent bench d'hier soir, en fait j'ai reconstruit les indexes et updaté les stats, et j'arrive à 25 ms pour * et 21 ms pour tous les champs [:petrus75]

 

bench plus rigoureux sous SQL Server à l'instant : sélection des 7 champs d'une view , constituée de 5 jointures. retourne 564 733 lignes

 

SELECT * : 743 ms
tous les champs :387 ms

 

Conclusion : SQL server == puxxor.[:dawak]

Message cité 1 fois
Message édité par skeye le 22-02-2010 à 09:26:11

---------------
Can't buy what I want because it's free -
n°1968046
skeye
Posté le 22-02-2010 à 09:28:32  profilanswer
 

...faut pas déconner, ça revient juste exactement au même en interne pour le sgbd, il y a juste un replace de l'étoile par la liste des champs - laquelle ne doit pas prendre 400ms à remonter.:o

 

[edit - antiflood de mes 2 :o ]

 
Harkonnen a écrit :

pour mon précédent bench d'hier soir, en fait j'ai reconstruit les indexes et updaté les stats, et j'arrive à 25 ms pour * et 21 ms pour tous les champs [:petrus75]

 

bench plus rigoureux sous SQL Server à l'instant : sélection des 7 champs d'une view , constituée de 5 jointures. retourne 564 733 lignes

 

SELECT * : 743 ms
tous les champs :387 ms

 

...en fait avec une différence pareille tu irais plus vite à récupérer la liste des champs toi-même dans le langage client pour construire ta requête qu'à utiliser l'étoile, non?[:el g]

Message cité 1 fois
Message édité par skeye le 22-02-2010 à 09:35:39

---------------
Can't buy what I want because it's free -
n°1968049
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-02-2010 à 09:38:00  profilanswer
 

skeye a écrit :

...faut pas déconner, ça revient exactement au même en interne pour le sgbd, il y a juste un replace de l'étoile par la liste des champs - laquelle ne doit pas prendre 400ms à remonter.:o


sauf que là c'est une view, pas une table :spamafote:
laquelle view est constituée de 5 tables en INNER, dont 2 tables contiennent plus de 700 000 lignes :o
après, la tambouille interne du SGBD, j'tavouerais qu'elle m'est inconnue [:petrus75]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968050
skeye
Posté le 22-02-2010 à 09:39:53  profilanswer
 

Harkonnen a écrit :


sauf que là c'est une view, pas une table :spamafote:


ça revient au même...describe tavue ça remonte en 400ms?[:petrus dei]


---------------
Can't buy what I want because it's free -
n°1968051
masklinn
í dag viðrar vel til loftárása
Posté le 22-02-2010 à 09:40:47  profilanswer
 

Harkonnen a écrit :


sauf que là c'est une view, pas une table :spamafote:
laquelle view est constituée de 5 tables en INNER, dont 2 tables contiennent plus de 700 000 lignes :o


C'est un cas super particulier, quoi :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1968058
drasche
Posté le 22-02-2010 à 09:53:45  profilanswer
 

skeye a écrit :

Conclusion : SQL server == puxxor.[:dawak]


Merci, j'allais le dire [:bien]
 
(en plus lui il travaille avec au minimum SQL Server 2005, moi chuis coincé avec SQL2K [:pingouino])


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1968060
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-02-2010 à 09:56:54  profilanswer
 

une autre requête (dans laquelle j'ai utilisé ROW_NUMBER pour simuler un DISTINCT => gain de 10 ms, c'est toujours ça de pris)
 

Code :
  1. SELECT  *
  2.             FROM    ( SELECT    Table1.champ,
  3.                                 toto,
  4.                                 Table2.titi,
  5.                                 Table2.cucu,
  6.                                 champ1,
  7.                                 champ2,
  8.                                 champ3,
  9.                                 MAX(Table3.champ) AS ts,
  10.                                 ROW_NUMBER() OVER ( PARTITION BY toto ORDER BY toto ) r
  11.                       FROM TheTable2
  12.                                 INNER JOIN Table2 ON ...
  13.                                 INNER JOIN Table1 ON ...
  14.                                 INNER JOIN Table3 ON ...
  15.                                 INNER JOIN Table4 ON ...
  16.                                 INNER JOIN Table5 ON ...
  17.                                 INNER JOIN Table6 ON ...
  18.                       WHERE     ( Table1.champ = 256 )
  19.                       GROUP BY  
  20.                Table1.champ,
  21.                                 toto,
  22.                                 Table2.titi,
  23.                                 Table2.cucu,
  24.                                 champ1,
  25.                                 champ2,
  26.                                 champ3
  27.                     ) T
  28.             WHERE   T.r = 1
  29.             ORDER BY ts DESC


 
et la version "tous les champs" :

Code :
  1. SELECT  champ,
  2.                                 toto,
  3.                                 titi,
  4.                                 cucu,
  5.                                 champ1,
  6.                                 champ2,
  7.                                 champ3,
  8.                                                                ts,
  9.                                                                r
  10.             FROM    ( SELECT    Table1.champ,
  11.                                 toto,
  12.                                 Table2.titi,
  13.                                 Table2.cucu,
  14.                                 champ1,
  15.                                 champ2,
  16.                                 champ3,
  17.                                 MAX(Table3.champ) AS ts,
  18.                                 ROW_NUMBER() OVER ( PARTITION BY toto ORDER BY toto ) r
  19.                       FROM TheTable2
  20.                                 INNER JOIN Table2 ON ...
  21.                                 INNER JOIN Table1 ON ...
  22.                                 INNER JOIN Table3 ON ...
  23.                                 INNER JOIN Table4 ON ...
  24.                                 INNER JOIN Table5 ON ...
  25.                                 INNER JOIN Table6 ON ...
  26.                       WHERE     ( Table1.champ = 256 )
  27.                       GROUP BY  
  28.                Table1.champ,
  29.                                 toto,
  30.                                 Table2.titi,
  31.                                 Table2.cucu,
  32.                                 champ1,
  33.                                 champ2,
  34.                                 champ3
  35.                     ) T
  36.             WHERE   T.r = 1
  37.             ORDER BY ts DESC


 
résultat : (Eval1 = tous les champs, Eval2 = *)
 
http://hfr-rehost.net/self/pic/9f6d9ee140fa486be85906b094328a4cb25b5963.png
 
100 ms pour 365 lignes, c'est pas rien :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968070
skeye
Posté le 22-02-2010 à 10:14:51  profilanswer
 

La version avec étoile envoie 300octets de plus depuis le client? Quelqu'un saurait m'expliquer ça?[:pingouino dei]

 

[edit]

 

oubliez, je lis à l'envers.:D


Message édité par skeye le 22-02-2010 à 10:17:11

---------------
Can't buy what I want because it's free -
n°1968087
skeye
Posté le 22-02-2010 à 10:46:54  profilanswer
 

Pour rigoler, récupération de la liste des champs à la main avant [:doc petrus] :

 
Code :
  1. <?php
  2.  
  3.  
  4. $sql = "select * from adresse where cod_anu_ina = 2008";
  5. $sql2 = "select adr_mail, cod_adr, cod_anu_ina, cod_bdi, cod_com, cod_ind,
  6.             cod_ind_ina, cod_pay, lib_ad1, lib_ad2, lib_ad3, lib_ade, num_tel, num_tel_port
  7.         from adresse where cod_anu_ina = 2008";
  8. $sql3 =  "select * from adresse where 1=2";
  9.  
  10.  
  11. $user = "xxxx";
  12. $passwd = "xxx";
  13. $base = "xxxx";
  14.  
  15. $conn  = oci_connect($user,$passwd,$base) or die('erreur de connexion');
  16.  
  17. $start1 = microtime(true);
  18. $stmt = oci_parse($conn, $sql);
  19. $result = oci_execute($stmt);
  20. $end1 = microtime(true);
  21.  
  22. echo 'etoile : ', $end1 - $start1, PHP_EOL;
  23.  
  24. $start2 = microtime(true);
  25. $stmt2 = oci_parse($conn, $sql2);
  26. $result2 = oci_execute($stmt2);
  27. $end2 = microtime(true);
  28.  
  29. echo 'liste des champs : ', $end2 - $start2, PHP_EOL;
  30.  
  31. $start3 = microtime(true);
  32. $stmt3 = oci_parse($conn, $sql3);
  33. $result3 = oci_execute($stmt3);
  34. $columns = oci_num_fields($stmt);
  35. $sql4 = 'select';
  36. for($i = 1; $i <= $columns; $i++){
  37.     $sql4 .= ' ' . oci_field_name($stmt, $i) . ',';
  38. }
  39. $sql4 .= '1 from adresse where cod_anu_ina = 2008';
  40.  
  41. $stmt4 = oci_parse($conn, $sql4);
  42. $result4 = oci_execute($stmt4);
  43. $end3 = microtime(true);
  44.  
  45. echo 'desc a la main : ', $end3 - $start3, PHP_EOL;
 
Citation :


etoile : 0.037340879440308
liste des champs : 0.036946058273315
desc a la main : 0.038138866424561

 

c'est chaud! [:dawak]


Message édité par skeye le 22-02-2010 à 10:47:22

---------------
Can't buy what I want because it's free -
n°1968088
skeye
Posté le 22-02-2010 à 10:50:22  profilanswer
 

...mais c'est con en fait, je fais toujours un select * [:moule_bite]
Sortez moi.[:dawak]

 

[edit]

 

Avec le mode OCI_DESCRIBE_ONLY sur l'execution de stmt3 ça va mieux :

 
Citation :


etoile : 0.037019014358521
liste des champs : 0.036793947219849
desc a la main : 0.037323951721191

Message cité 1 fois
Message édité par skeye le 22-02-2010 à 10:53:46

---------------
Can't buy what I want because it's free -
n°1968090
masklinn
í dag viðrar vel til loftárása
Posté le 22-02-2010 à 10:55:40  profilanswer
 

skeye a écrit :

...mais c'est con en fait, je fais toujours un select * [:moule_bite]
Sortez moi.[:dawak]
 
[edit]
 
Avec le mode OCI_DESCRIBE_ONLY sur l'execution de stmt3 ça va mieux :
 

Citation :


etoile : 0.037019014358521
liste des champs : 0.036793947219849
desc a la main : 0.037323951721191



Ça change pas grand chose quand même :(


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1968091
skeye
Posté le 22-02-2010 à 10:57:16  profilanswer
 

masklinn a écrit :


Ça change pas grand chose quand même :(


on va quasiment aussi vite quelle que soit la solution choisie...moi je dis que le sql server d'harko est moisi, c'est tout.[:petrus75]

 

[edit]

 

Allez j'ai rajouté le fetchall pour voir si je me rapproche des résultats d'harko, on a un ordre de grandeur un peu plus significatif :

 
Citation :


etoile : 0.585608959198
liste des champs : 0.56935811042786
desc a la main : 0.60053205490112

Message cité 1 fois
Message édité par skeye le 22-02-2010 à 11:02:52

---------------
Can't buy what I want because it's free -
n°1968098
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-02-2010 à 11:18:36  profilanswer
 

skeye a écrit :


on va quasiment aussi vite quelle que soit la solution choisie...moi je dis que le sql server d'harko est moisi, c'est tout.[:petrus75]


tu compares ce qui n'est pas comparable, je viens de faire un bête select d'une table de 14500 lignes et 5 champs, et j'obtiens :
* : 085 ms
tous : 082 ms
 
par contre, commence à mettre des jointures, des agrégats, ou mieux : fais un select * d'une vue séverement burnée (genre 5-6 jointures et tout le toutim), et poste tes résultats :o


---------------
J'ai un string dans l'array (Paris Hilton)
n°1968102
Shinuza
This is unexecpected
Posté le 22-02-2010 à 11:29:17  profilanswer
 

Quelqu'un pour du Mysql et Postgres? J'ai pas Mysql ( et je compte pas l'installer ) et j'ai pas suffisament de lignes dans mes tables sous Postgres.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°1968104
drasche
Posté le 22-02-2010 à 11:31:52  profilanswer
 

J'avais une db MySQL de taille conséquente mais faudrait que je la retrouve dans un backup :o
 
(et encore, j'ai pas de vue définie là-dedans)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1968127
skeye
Posté le 22-02-2010 à 12:19:41  profilanswer
 

Harkonnen a écrit :


par contre, commence à mettre des jointures, des agrégats, ou mieux : fais un select * d'une vue séverement burnée (genre 5-6 jointures et tout le toutim), et poste tes résultats :o


 
Je trouve une vue avec moins de 40 champs à lister et je te fais ça.[:petrus75]


---------------
Can't buy what I want because it's free -
n°1968128
skeye
Posté le 22-02-2010 à 12:20:45  profilanswer
 

Harkonnen a écrit :


tu compares ce qui n'est pas comparable, je viens de faire un bête select d'une table de 14500 lignes et 5 champs, et j'obtiens :
* : 085 ms
tous : 082 ms

 

euh mon exemple c'est 130000 lignes et 14 champs hein, ça reste plus significatif que ton truc.:o


Message édité par skeye le 22-02-2010 à 12:21:03

---------------
Can't buy what I want because it's free -
n°1968139
skeye
Posté le 22-02-2010 à 13:45:01  profilanswer
 

Allez, avec une vue un peu plus couillue (jointure avec  notamment 4 tables ayant 45000, 62000, 80000 et 130000 lignes; 20 champs) :

 
Code :
  1. $sql = "select * from extern_vue_mail_etudiant";
  2. $sql2 = "select adresse_acheminement, adresse_code_postal, adresse_ligne_1,
  3.         adresse_ligne_2, adresse_ligne_3, adresse_ligne_etranger, adresse_pays,
  4.         cle_activation, cod_etu, date_naissance, genre, ine, nom_patronymique, nom_usuel,
  5.         prenom_1, prenom_2, prenom_3, telephone, temoin_ine_provisoire, universite
  6.         from extern_vue_mail_etudiant";
  7.  
  8. $user = "xxx";
  9. $passwd = "xxx";
  10. $base = "xxx";
  11.  
  12. $conn  = oci_connect($user,$passwd,$base) or die('erreur de connexion');
  13.  
  14. $start1 = microtime(true);
  15. $stmt = oci_parse($conn, $sql);
  16. $result = oci_execute($stmt);
  17. oci_fetch_all($stmt, $all);
  18. $end1 = microtime(true);
  19.  
  20. echo 'etoile : ', $end1 - $start1, PHP_EOL;
  21.  
  22. $start2 = microtime(true);
  23. $stmt2 = oci_parse($conn, $sql2);
  24. $result2 = oci_execute($stmt2);
  25. oci_fetch_all($stmt2, $all2);
  26. $end2 = microtime(true);
  27.  
  28. echo 'liste des champs : ', $end2 - $start2, PHP_EOL;
 

Première exécution :

 
Citation :

etoile : 1.8330628871918
liste des champs : 1.6562280654907

 

Deuxième exécution :

 
Citation :


etoile : 1.66739320755
liste des champs : 1.6507740020752

 

[:doc petrus]


Message édité par skeye le 22-02-2010 à 13:47:09

---------------
Can't buy what I want because it's free -
n°1968145
Jubijub
Parce que je le VD bien
Posté le 22-02-2010 à 13:54:50  profilanswer
 

La mienne est plus grosse que la vôtre  [:cerveau dr]


---------------
Jubi Photos : Flickr - 500px
n°1968148
drasche
Posté le 22-02-2010 à 14:01:45  profilanswer
 

Bon, j'vais jouer à votre jeu en SQL Server 2000, j'en ai une pas trop mal pour ça [:moule_bite]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1968153
skeye
Posté le 22-02-2010 à 14:25:41  profilanswer
 

Jubijub a écrit :

La mienne est plus grosse que la vôtre  [:cerveau dr]


Je peux pas utiliser mes plus grosses tables, ça crashe php.[:petrus75]
Faudrait que je trouve comment on mesure le temps d'exécution directement dans toad.[:joce]
'fin de toute manière ça devrait être fonction du nombre de champs à retourner, pas de la taille de la table.:o


Message édité par skeye le 22-02-2010 à 14:28:22

---------------
Can't buy what I want because it's free -
n°1968154
drasche
Posté le 22-02-2010 à 14:28:37  profilanswer
 

Ouais pareil, parce que j'ai que le temps en secondes :o
 
ptet que SELECT GETDATE() avant et après le ferait [:petrus75]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°1968374
skeye
Posté le 23-02-2010 à 07:33:38  profilanswer
 

Tiens pendant que j'y pense, j'aurais besoin en sql de récupérer un BLOB venant d'une autre base (les 2 bases sont sous oracle 10).
Les blob ne passant pas avec un dblink, quelqu'un aurait une solution sympa? La seule option que je vois c'est de se connecter à l'autre base dans une fonction, mais je trouve casse-pieds de devoir mettre un login/mot de passe en clair là-dedans...[:joce]


Message édité par skeye le 23-02-2010 à 07:33:51

---------------
Can't buy what I want because it's free -
n°1968421
skeye
Posté le 23-02-2010 à 10:33:44  profilanswer
 

Tiens, et autre question à la con. J'ai un fichier PHP en utf8, je veux interroger une base oracle en iso8859.
La requête que je veux exécuter fait grosso-modo ça :
 

Code :
  1. SELECT 'une chaine avec accent éééé' || unchamptexteavecdesaccents FROM TABLE


 
Problème : si j'utilise la requête telle quelle dans mon fichier php, dans le résultat obtenu les accents de la chaine concaténée "en dur" sont codés en utf8, et ceux venant du champ dans la base en iso8859.[:dawak]
Quelqu'un a une solution propre pour ça?[:tinostar]


---------------
Can't buy what I want because it's free -
n°1968438
neriki
oenologue
Posté le 23-02-2010 à 10:53:29  profilanswer
 

http://php.net/manual/en/function.utf8-decode.php
 
:o


---------------
C'est pas bon, Neriki, tu recommences à glander, là. :o
n°1968443
Anonymouse
Posté le 23-02-2010 à 10:57:06  profilanswer
 

skeye a écrit :

Tiens, et autre question à la con. J'ai un fichier PHP en utf8, je veux interroger une base oracle en iso8859.
La requête que je veux exécuter fait grosso-modo ça :
 

Code :
  1. SELECT 'une chaine avec accent éééé' || unchamptexteavecdesaccents FROM TABLE


 
Problème : si j'utilise la requête telle quelle dans mon fichier php, dans le résultat obtenu les accents de la chaine concaténée "en dur" sont codés en utf8, et ceux venant du champ dans la base en iso8859.[:dawak]
Quelqu'un a une solution propre pour ça?[:tinostar]


 
Peut être en renseignant la variable NLS_LANG: + propre que d'encoder décoder à chaque fois.

Message cité 1 fois
Message édité par Anonymouse le 23-02-2010 à 11:02:28
n°1968464
skeye
Posté le 23-02-2010 à 11:37:10  profilanswer
 

 

Je me demande ce qui est le plus moche entre

 
Code :
  1. $sql = "SELECT '" . utf8_decode('une chaine avec accent éééé') . "'|| unchamptexteavecdesaccents FROM TABLE";
 

et (solution adoptée pour l'instant) :

 
Code :
  1. $sql = "SELECT convert('une chaine avec accent éééé', 'WE8ISO8859P1', 'UTF8') || unchamptexteavecdesaccents FROM TABLE";
 


Anonymouse a écrit :

Peut être en renseignant la variable NLS_LANG: + propre que d'encoder décoder à chaque fois.

 

raté, essaye encore :D C'est déjà fait, ça, et heureusement.:D
Curieusement - ou pas, quand on connait le bestiau [:el g] - renseigner les bonnes variables d'environnement et spécifier le jeu de caractères à utiliser ne suffisent pas à php pour se démerder tout seul.[:moule_bite]


Message édité par skeye le 23-02-2010 à 11:38:49

---------------
Can't buy what I want because it's free -
n°1968504
flo850
moi je
Posté le 23-02-2010 à 14:04:58  profilanswer
 

question postgis/postgresql :

Code :
  1. SELECT
  2.   "groupement",
  3.    encode(AsBinary(force_collection(force_2d("the_geom" )),'NDR'),'base64') AS geom,
  4.   "gid"
  5. FROM (
  6.         SELECT
  7.               c1.the_geom AS the_geom,
  8.               c1.gid AS gid ,
  9.               c1.groupement
  10.         FROM commune AS c1
  11.             JOIN thematique AS t ON c1.gid =t.gid
  12.        ) AS foo


ça marche en direct dans la console sql , ça ne marche pas depuis une appli (ERROR: relation "thematique" does not exist )

 

des idées ?

Message cité 1 fois
Message édité par flo850 le 23-02-2010 à 14:05:07

---------------

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  20  21  22  23  24  25

Aller à :
Ajouter une réponse
 

Sujets relatifs
Requete SQL de selection complexe[SQL SERVER] Ajout d'une colonne en PS...mais inutilisable
[ODBC] DSN pour se connecter à une base SQL[PDO/SQL] Aide selection et classement (JOIN ??)
Problème conditions requete SQLSQL/PHP BDD de réservation de chambres
Jointure 'LIKE' SQL => BOtable SQL Ajouter une colonne au lieu de creer une nouvelle table
Requête SQL complexe 
Plus de sujets relatifs à : BlaBla@SQL


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