|
select like sur hyper file tres lent |
Iniciado por yaya1981fr, ago., 30 2005 7:37 PM - 8 respostas |
| |
| | | |
|
| |
Publicado em agosto, 30 2005 - 7:37 PM |
bonsoir, j'effectue une requete avec select like sur un fichier de plus de 10 000 lignes. Le tps de reponse est tres tres lent! Il y aurait il pas une autre requete plus rapide? Merci. |
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 30 2005 - 7:45 PM |
Bonjour,
Si vous nous donniez le code de la requête, nous pourrions vous aider.... -- Ed en Ligne
"andy" <yaya1981fr@yahoo.fr> a écrit dans le message de news: 4315ba66$1@news.pcsoft.fr...
bonsoir, j'effectue une requete avec select like sur un fichier de plus de 10 000 lignes. Le tps de reponse est tres tres lent! Il y aurait il pas une autre requete plus rapide? Merci.
|
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 30 2005 - 7:48 PM |
"andy" <yaya1981fr@yahoo.fr> a écrit dans le message de news: 4315ba66$1@news.pcsoft.fr...
bonsoir, j'effectue une requete avec select like sur un fichier de plus de 10 000 lignes. Le tps de reponse est tres tres lent! Il y aurait il pas une autre requete plus rapide? Merci.
est ce que la rubrique du like est une clé ? si ce n'est pas le cas mettez la rubrique en clé et faite le test quel le type de la rubrique ?
cdt JeAn-PhI |
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 30 2005 - 7:58 PM |
Quelle est la syntaxe du LIKE ? Y-a-t-il un index sur la rubrique cherchée ?
Important: un LIKE '%...' fera TOUJOURS une recherche séquentielle sur le fichier complet sans utiliser l'index de la rubrique même s'il y en a un.
Christian Potvin Beaulieu Canada
bonsoir, j'effectue une requete avec select like sur un fichier de plus de 10 000 lignes. Le tps de reponse est tres tres lent! Il y aurait il pas une autre requete plus rapide? Merci. |
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 30 2005 - 9:48 PM |
j'effectue cette requete :
SELECT * FROM STOCK WHERE REFERENCE LIKE '%01sc%' |
| |
| |
| | | |
|
| | |
| |
Publicado em agosto, 31 2005 - 12:58 AM |
C'est certain que cette requête va être longue sur un gros fichier car le signe % placé devant la valeur à chercher dans l'expression LIKE '%01sc%' fait en sorte que le fichier est traversé séquentiellement (record par record sans tenir compte d'aucun index). Normalement, avec un LIKE de cette syntaxe, il faut tenter d'avoir au moins un autre argument dans le WHERE pointant sur une autre rubrique avec index pour limiter le nombre de records à traiter et forcer la passage par un index.
EX: WHERE REFERENCE LIKE '%01sc%' AND CATEGORIE = 'ABC'
ou CATEGORIE est une rubrique indexée.
SQL facilite le développement mais la performance obtenue est souvent à fignoler...
Bon dev,
Christian Potvin Beaulieu Canada
j'effectue cette requete :
SELECT * FROM STOCK WHERE REFERENCE LIKE '%01sc%'
|
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 01 2005 - 1:49 PM |
C'est typiquement sur ce genre de requête ( entr'autre ) que le client/serveur peut grandement améliorer les choses. Dans le cas d'une base avec des fichiers partagés ( HF, Access... ), c'est le client qui balaye toute la base, donc l'ensemble des enregistrements transitent sur le réseau, y compris ceux qui ne correspondent pas à la requête. Dans le cas d'une base Client Serveur ( HF C/S, Oracle... ), c'est le serveur qui traite la requête, donc seuls les enregistrements correspondant au critères transitent.
Un exemple concret, sur ma base Client Serveur: Je fais un select count(*) from article where art_c_dgn_lng like '%Y%'. Je n'ai pas d'index sur cette colonne, et de toute façon le moteur ne pourrait pas l'utiliser. J'ai 49000 enregistrements dans la table, la requête met moins d'une seconde à s'exécuter et me renvoie 2900 produits.
Frédéric. |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 01 2005 - 2:56 PM |
Bonjour, "Frédéric DEMILLY" <f.demilly@pacificpeche.fr> writes:
C'est typiquement sur ce genre de requête ( entr'autre ) que le client/serveur peut grandement améliorer les choses. Dans le cas d'une base avec des fichiers partagés ( HF, Access... ), c'est le client qui balaye toute la base, donc l'ensemble des enregistrements transitent sur le réseau, y compris ceux qui ne correspondent pas à la requête. Dans le cas d'une base Client Serveur ( HF C/S, Oracle... ), c'est le serveur qui traite la requête, donc seuls les enregistrements correspondant au critères transitent.
Oui et non.
Non car faire une requête avec un like %XXX% je ne suis pas persuadé que HF C/S utilise les index et en plus les index sont ils utiles?.
Pour le Oui c'est évident que sur le réseau il va ne transiter que le résultat, parcontre tu charges le travail de ton serveur...
Pour améliorer peut être utiliser match si supporté, où changer la colonne afin de le mettre sur au moins 2 colonne et indexer ces colonnes.
Un exemple concret, sur ma base Client Serveur: Je fais un select count(*) from article where art_c_dgn_lng like '%Y%'. Je n'ai pas d'index sur cette colonne, et de toute façon le moteur ne pourrait pas l'utiliser.
avec match tu ne peux pas ?
J'ai 49000 enregistrements dans la table, la requête met moins d'une seconde à s'exécuter et me renvoie 2900 produits.
tu utilises HF C/S pour avoir ces résultats?
-- suivre ce lien pour répondre: http://cerbermail.com/… Daniel
|
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 01 2005 - 5:08 PM |
Non car faire une requête avec un like %XXX% je ne suis pas persuadé que HF C/S utilise les index et en plus les index sont ils utiles?.
Il est clair que HF C/S ne peux pas non plus utiliser les indexes pour la requête, tout comme n'importe quel moteur de base de données, à ma connaissance. Mais il est plus rapide de lire l'ensemble des enregistrements en local sur le serveur, qu'à travers le réseau. Donc à priori HF C/S peut l'aider à améliorer les temps de réponse, s'il doit obligatoirement utiliser ce genre de requête.
Pour le Oui c'est évident que sur le réseau il va ne transiter que le résultat, parcontre tu charges le travail de ton serveur...
Tout à fait, mais nos bases de données ( 2 Progress (30Go au total), 1 SQL Server (1.5Go ) et 1 MaxDB (1Go) ) sont hébergées sur un serveur dédié et correctement configuré: Bi Xéon 3Ghz, 3Go de RAM, 10 disques en RAID 0+1 sur un controleur double canal... Donc le serveur encaisse tranquillement ce genre de travail.
>avec match tu ne peux pas ? Non, car ...
tu utilises HF C/S pour avoir ces résultats?
Non, une base MaxDB via ODBC.
Frédéric. |
| |
| |
| | | |
|
| | | | |
| | |
|