|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre du Club
![]() ![]() |
Bonjour,
Je veux indexer ma table de facon a optimiser les requetes de selection (nombreuses) et je voudrais avoir votre avis, je sais que pour optimiser une table on fait des index selon la methode dont on fait les select, pour moi le plus grand nombre des select c'est de cette forme : Citation:
Code :
CREATE INDEX name ON TABLE USING RTREE (LOWER(Content)); |
|
|
|
00
|
|
|
#2 | |||
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
Citation:
La réponse concernant les index se trouve au début du chapitre 11.2 Pour B-Tree Citation:
Citation:
Sans oublier de lire la doc qui a été traduite en français KrysKool |
|||
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() ![]() |
resalut, ok j'avoue
voila je vous donne des snapshot d'une ANALYSE d'un SELECT avant et aprés la création d'index et apparament, l'index a ralentit la selection : voici mon SELECT : Code :
SELECT "MsgId","Content" AS content,"TimeCreated" AS tc,"SOA" AS oa FROM sms_mo WHERE ((LOWER("Content") LIKE 'rm%')) AND (("DA"='87000')) ORDER BY "MsgId" ASC Citation:
Code :
CREATE INDEX sms_mo_content ON sms_mo USING BTREE (LOWER("Content")); Citation:
|
||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
Euh y'a quelque chose de bizzare, avant de crée ton index ton select te ramene 4 lignes, et après sa création il t'en ramene 5,
donc pour ma part tu ne peux pas comparer tes 2 select puis que tu as inseré d'autre enregistrement dans la base entre temps ensuite pourquoi met tu le nom de tes champs entre " ", tu ne fais plus de SQL Server tu es sous PostgreSQL, donc pour simplifier la vie, tu écrit tes champ en minuscule, ainsi que le nom de tes tables et vire les (( ... )) dans ton where, également vire le LOWER dans la création de ton index Si tu utilise PHP, fais ton lower avec une fonction PHP, c'est beaucoup plus rapide. Y'aurait d'autre chose a dire, commence par ces conseils. KrysKool |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() ![]() |
ok alors,
pour les quotes ", mes reqqueuetes ne sont acceptés que si j'entoures les colonnes par des double quotes et les valeurs par des simple quotes, peut etre que c'est dans la config de la base mais peu importe. je n'ai pas inséré d'autrs enregistrement, les deux select ont été fait sur la meme table. 5 row veut dire que le resultat de explain est affiché sur 5 lignes de meme pour 4 rows. a mon avis enlever les ((..)) ne touchera pas a la performance du moment que les deux tests sont faits avec le meme select. je ne peux pas utiliser une fonction lower dans mon code, je voudrais avoir le lower de la colonne elle meme et non pas de la valeur a comparer. |
|
|
00
|
|
|
#6 | |
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
oh quel belle uzine a gaz
je te conseille d'éviter d'avoir plusieur champ avec le meme nom et seulement différencié avec des majuscules minuscules. je prend toujours de s minuscules quand je crée mes tables exact pour les rows j'était pas reveillé vire les (( )) elle ne serve a rien Citation:
KrysKool |
|
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Inscription : avril 2004 Messages : 9 375 ![]() |
effectue aussi de ta base de données.
ça peut etre utile.
__________________
Pensez toujours aux cours, FAQ Perl et la fonction recherchez!!!!!!!! Lisez les règles du forum Perl. Aucun problème par MP, merci de poster vos questions dans les sous forums dédiés et rendez vos codes sources lisibles |
|
|
00
|
|
|
#8 | ||
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 24 ![]() |
Je vais peut être dire une bétise mais le coup de faire plein de LOWER à chaque fois n'est peut être pas utile (et notamment dans l'index). Je m'explique :
N'est il pas possible de faire un LIKE qui se fout de la casse (ILIKE) et n'afficher que le résultat en minuscule ? Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com