logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Scripting, langages interprétés >> Amélioré une recherche dans un base sql Newtopic | Reply
poster txt
lombredudragon
Inscrit le 11-01-2004
Posté le 09-04-2009 17:45

Bonjour all,

Voilà mon problème, j'ai une table de cette forme :

md5_id
md5_hash
md5_plaintext

Quand je souhaite récupérer le texte en clair pour le hash "fe65f4e5f4..." ou récupérer le hash pour un mot je fais un vieux :

SELECT md5_hash FROM matable WHERE md5_plaintext = binary 'monmot'

ou

SELECT md5_plaintext FROM matable WHERE md5_hash = 'monhash'

Pour une table de 10 000 entrées ça va mais quand on commence à atteindre les 500 000 entrées, bé ça commence à ramer.

Y'a moyen de réorganiser ma base pour aller plus vite ? Genre arbre ....
_________________________

profil | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 09-04-2009 18:32

Que quelqu'un me reprenne si je dis une ânerie, mais il me semble que les options d'optimisation sont dépendantes du SGBD. Par défaut Oracle cherche à optimiser au max ("genre arbre"). Il est possible d'ajouter des options selon l'utilisation qu'on a de la BD pour améliorer les perfs (comment les tables sont stockées sur le DD par exemple). Sous MySQL il me semble que c'est moins customisable. Bref tu tournes sous quoi ?

Sinon pour améliorer les perfs, plutôt que de faire plusieurs requêtes successives, essaie plutot de faire des requêtes imbriquées (je sais pas si ce tip te concerne).

[ Ce Message a été édité par: bibou1324 le 2009-04-09 18:34 ]
profil | Website | edit | quote
hyatus
Inscrit le 25-08-2001
Avatar
Posté le 09-04-2009 18:36

Ouai tu peux indexer les colonnes si ce n'est pas déjà fait. ( création d'index ) Ca multiplie hautement les performances.

Utilises les clauses distinct(ne retourne pas les doublons) et SQL_BIG_RESULT, ...

Tu peux aussi découper ta table en plusieurs tables, paramétrer clés étrangères/primaires,... et bosser avec des jointures simples.

Sinon c'est quoi ta base de données ?
_________________________
Car la liberte n'est pas un Droit mais un Devoir, et que le savoir apporte la Liberte,alors la TAZ est ce qu'elle est, le reflet de la societe qui nait de ce qu'elle sait... ( hyatus copyleft )
profil | mail | Website | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 10-04-2009 14:43

Pas d'accord pour le distinct. Le distinct implique un tri sur la BD pour vérifier les doublons, et même si ce n'est qu'en O(log n) ça peut rajouter en temps si c'est une grosse table. Donc plutôt à éviter si possible.
Par contre, les jointures simples, c'est effectivement bien.

Sinon, mettre la BD en 3ème forme normale augmente nettement la clarté de la programmation derrière, donc indirectement les performances.
http://fr.wikipedia.org/wiki/Forme_normale_(bases_de_donn%C3%A9es_relationnelles)


profil | Website | edit | quote
lombredudragon
Inscrit le 11-01-2004
Posté le 10-04-2009 17:14

Je confirme, je suis bien sous MySQL.

Pour les requêtes imbriquées, ça donnerais quoi ?
Je vois pas trop là.
Genre pour le mot "abcde", on présélectionne les hash pour les mots commençant en "a%" puis en "ab%" en "abc%" etc ?

Je vais suivre aussi les conseils d'optimisation de phpmyadmin et peut-être lire une doc complète avant de dire des conneries

_________________________

profil | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 10-04-2009 19:06

Ce que j'appelle requête imbriquée, c'est les trucs du genre :
Quote:
Select chose
from (select truc from table1 natural join table2)join table3 on (plop=machin)
where bidule in (select plouf from table_chais_plus_combien


(Ceci est sous Oracle, j'avoue ne pas connaître des masses la syntaxe MySQL)
Alors oui, ça donne des requêtes complètement illisibles, c'est chiant à programmer, c'est pas généralisable, et encore moins portable d'un SGBD à un autre. Mais au moins c'est ta base de données qui travaille, et pas ton programme.
Ce que je cherche à dire (oui je viens de me relire et c'est pas clair), c'est que les BD sont optimisées (Oracle plus que MySQL). Donc plus la BD bosse, plus c'est optimisé. Il faut chercher à en faire le moins possible dans ton programme, quitte à te creuser la tête pour faire des requêtes bien compliquées.

En résumé, une requête imbriquée c'est donc un truc super bourrin qui est chiant à faire et surtout qui dépend de ce que tu veux faire. Heuu si tu veux pas te prendre la tête oublie ça.

Effectivement les conseils d'optimisation de phpmyadmin c'est peut être bien de commencer par là (j'me suis peut-être un peu trop enflammé ... )
profil | Website | edit | quote
bibou1324
Inscrit le 06-03-2005
Posté le 10-04-2009 20:19

Bon, j'ai compris ce que tu cherchais à faire (j'ai mis du temps ^^). Donc ce que j'ai dis ne te concerne pas du tout, en fait, sachant que ta base est très simple (juste les correspondances id/hash/word pour chaque cryptage ), les requêtes ne sont pas optimisables. Donc je vois pas beaucoup de solutions. Peut être créer un Index en B-Tree ou en R-Tree ? Sinon changer de serveur.

http://dev.mysql.com/doc/refman/5.0/en/create-index.html
http://en.wikipedia.org/wiki/R-tree
http://www.apprendre-php.com/tutoriels/tutoriel-26-mysql-introduction-a-l-optimisation.html
Quote:

L'optimisation du serveur MySQL est une phase assez délicate dans le sens où elle peut nécessiter beaucoup d'efforts, pour des résultats pas toujours spectaculaires. Il est fortement conseillé de laisser le soin à un expert de manipuler les nombreux paramètres du serveur MySQL, sous peine de passer des heures à essayer de remettre en marche un serveur qui finalement ne fonctionnait pas si mal que ça avant.

L'idée maîtresse est de faire en sorte que MySQL fasse au maximum ses traitements en mémoire. Le but étant encore une fois, de réduire les accès disque.

La première étape consiste à collecter l'information, tout simplement afin de savoir quoi optimiser. les outils utiles dans cette mission seront les outils de diagnostique liés à l'OS, les logs de MySQL ainsi que les variables d'état.

L'optimisation dépend également du type de moteur de stockage utilisé.

Pour les tables MyISAM, le premier paramètre à regarder est le key_buffer_size.
Un moyen simple de savoir s'il est bien paramétré est de faire le rapport key_reads / key_read_request, le résultat doit être inférieur à 0.03.

Dans le cas contraire essayez d'augment votre key_buffer_size mais tout en ne dépassant pas plus de 25% de la RAM.

Pour InnoDB, le paramètre "équivalent" est innodb_buffer_pool_size. Là, il n'y a pas de calcul magique, mais la limite à ne pas dépasser est 80% de la RAM, pour un serveur dédié à MySQL avec toutes les tables en InnoDB.

Il y a bien entendu pleins d'autres choses à voir, mais qui ne rentrent pas dans le cadre de cette introduction à l'optimisation.


profil | Website | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 10-04-2009 21:55

Autre solution, ne pas utiliser de base de donnée mais plutôt deux fichiers:
1 fichier contenant les hash triés (16 ou 20 octets suivant le type de hash, voir autre chose s'il y a un sel) de taille fixe accompagnés chacun d'un offset (voir plus loin) de 4 octets (32 bits suffisent largement)
1 fichier contenant les chaines associées aux hashes et situées à la position indiquées par les offsets du fichier précédent.

La recherche du mot de passe associé au hash donné se fait très rapidement puisque le premier fichier contient des enregistrements triés de taille fixe (contenant le hash et l'offset). Pour 500 000 mots de passe il suffit d'environ 20 déplacements/comparaisons (recherche par dichotomie) pour obtenir l'offset permettant d'accéder au mot de passe en un seul déplacement/lecture dans le second fichier. En plus ce premier fichier, pour 500 000 entrées contenant des hash MD5 classiques, occupe seulement 10 Mo. Enfin l'ajout de nouveaux enregistrements oblige à retrier uniquement le premier fichier.
profil | edit | quote
lombredudragon
Inscrit le 11-01-2004
Posté le 15-04-2009 18:21

Bon, je vais optimiser un minima en suivant deux trois conseils et quand j'aurais un peu plus de finances j'augmenterais mes parts sur le serveur pour gagner en puissance/mémoire.

Je vais voir du coté du R-Tree B-Tree aussi.

Merci bien à tous pour vos réponses.

Je vous tiendrais au courant de l'évolution du projet.


_________________________

profil | edit | quote
hyatus
Inscrit le 25-08-2001
Avatar
Posté le 15-04-2009 23:14

@bibou1324 >> Tu as raison pour la clause distinct, néanmoins on gagne sur le temps d'affichage :x

Juste pour enrichir un peu plus ce thread

http://www.mysqlperformanceblog.com/
_________________________
Car la liberte n'est pas un Droit mais un Devoir, et que le savoir apporte la Liberte,alors la TAZ est ce qu'elle est, le reflet de la societe qui nait de ce qu'elle sait... ( hyatus copyleft )
profil | mail | Website | edit | quote
lombredudragon
Inscrit le 11-01-2004
Posté le 16-04-2009 14:03

Damned hallucinant comme la création d'un index ça peut changer les choses. Les recherches sont quasi instantanées maintenant. Pinaise je vous aime.


Ps: je rajoute un lien sur la doc mysql pour les index

http://dev.mysql.com/doc/refman/5.0/fr/mysql-indexes.html

_________________________


[ Ce Message a été édité par: lombredudragon le 2009-04-16 14:04 ]
profil | edit | quote
kakakaoo
Inscrit le 11-01-2018
Posté le 11-01-2018 04:12

coach factory outlet online
coach outlet store
michael kors outlet store
michael kors canada
cheap oakley sunglasses
ferragamo outlet
polo ralph lauren outlet
polo ralph lauren outlet online
fitflops
moncler jackets
adidas yeezy
yeezy boost
coach outlet store online clearances
canada goose sale
coach outlet
adidas nmd
oakley sunglasses
michael kors outlet clearance
canada goose outlet
coach outlet
michael kors outlet
christian louboutin outlet
air max 2017
tory burch outlet
yeezy boost
michael kors outlet
supreme clothing
red bottoms
ugg outlet
gucci handbags
air jordan shoes
pandora jewelry
canada goose jackets
ugg outlet
ugg outlet
jordan shoes
michael kors outlet
michael kors outlet
longchamp outlet online
jordan retro 11
ralph lauren uk
canada goose uk
cheap jordans
coach factory outlet online
philipp plein shirt
adidas outlet
polo outlet
coach outlet
ugg shoes
canada goose sale
nike air max
ugg boots on sale
canada goose outlet
north face jackets
cheap jordans for sale
fred perry
louis vuitton outlet online
oakley sunglasses
michael kors outlet clearance
yeezy boost
louis vuitton outlet online
coach outlet online
kate spade outlet
adidas nmd
polo ralph lauren outlet online
ugg outlet
hermes handbags
timberland outlet
ugg boots
longchamp outlet
hermes handbags
coach outlet
ralph lauren
yeezy boost
jordan shoes
fred perry polo
louis vuitton outlet store
michael kors handbags
michael kors outlet
canada goose outlet
coach factory outlet
adidas outlet
mulberry outlet
uggs
adidas superstar
cheap ray ban sunglasses
louis vuitton outlet store
coach bags
pandora charms
michael kors outlet clearance
pandora charms
michael kors outlet
christian louboutin
uggs outlet
polo ralph lauren outlet
canada goose outlet
coach factory outlet
canada goose clothing
ugg australia
adidas campus
ray ban sunglasses
ralph lauren outlet
pandora charms sale
oakley sunglasses
cheap mlb jerseys china
mbt
cheap jordans free shipping
ugg outlet
nfl jerseys wholesale
birkenstocks
ugg outlet
pandora charms sale clearance
pandora charms sale clearance
canada goose outlet
canada goose
mbt shoes
canada goose
salvatore ferragamo
ugg outlet
ralph lauren uk
hermes outlet
pandora jewelry
coach factory outlet
coach outlet store online
air max 2018
ugg sale
michael kors outlet online
coach outlet
ralph lauren outlet
ralph lauren outlet
ugg boots for women
kate spade
michael kors outlet store
ralph lauren outlet
louboutin shoes
ralph lauren outlet
coach factory outlet
louboutin shoes
uggs canada
harden vol 1
michael kors outlet
polo outlet
coach outlet
canada goose
valentino shoes outlet
canada goose jackets
ugg outlet
cheap uggs
christian louboutin outlet
ugg outlet
ugg boots
pandora charms sale clearance
canada goose outlet
adidas shoes
adidas shoes
moncler coats
hermes bags
polo ralph lauren outlet online
coach outlet
adidas yeezy boost
uggs outlet
nmd shoes
nike outlet
discount oakley sunglasses
pandora charms sale
cheap ray ban sunglasses
ralph lauren uk
canada goose coats
pandora charms
uggs canada
pandora outlet
north face jackets
oakley sunglasses sale
coach outlet
supreme clothing
moncler outlet
ralph lauren outlet
moncler
mulberry handbags
uggs outlet
pandora charms
canada goose uk
cheap oakley sunglasses
ugg outlet
adidas yeezy
ray ban sunglasses discount
moncler jackets
cheap jordans
ralph lauren sale clearance
coach outlet store
louis vuitton outlet
pandora jewelry
timberland boots outlet
ugg boots
nike shoes
ugg boots canada
polo ralph lauren outlet online
uggs
coach outlet store
michael kors outlet
ralph lauren
doudoune moncler
pandora charms
cheap jordans
kate spade outlet store
ralph lauren outlet
canada goose outlet
fitflops sale clearance
timberland boots
coach factory outlet
michael kors outlet
burberry
ugg outlet
canada goose uk
hermes handbags
kate spade
fitflops
polo ralph lauren outlet online
coach factory outlet
ugg boots
ugg outlet online
mbt shoes
timberland boots
coach canada
coach outlet
tory burch outlet store
air jordan shoes
canada goose outlet
cheap mlb jerseys
coach outlet
coach outlet store
michael kors uk
ralph lauren outlet
philipp plein outlet
coach outlet
air max 97
canada goose jackets uk
canada goose
coach outlet
adidas yeezy
nike shoes
canada goose
coach factory outlet
adidas
north face outlet online
ugg boots
nike outlet store
cheap nfl jerseys
adidas yeezy boost
cheap nfl jerseys
michael kors
jordan shoes
cheap ugg boots
fitflops
ralph lauren outlet
coach outlet
pandora outlet
oakley sunglasses
north face outlet
ugg outlet
louis vuitton
coach outlet
michael kors canada
michael kors outlet
burberry outlet
polo ralph lauren outlet
michael kors outlet online
nike outlet store
coach factorty outlet
ralph lauren outlet
moncler jackets
ralph lauren uk
moncler jackets
canada goose outlet
pandora jewelry
moncler jackets outlet
moncler outlet
canada goose jackets
coach outlet
kate spade handbags
adidas shoes
ugg boots
adidas outlet
the north face
mulberry uk
ugg boots on sale
coach handbags
michael kors factory outlet
longchamp outlet
uggs
canada goose outlet
canada goose sale
jordan retro
canada goose outlet
supreme clothing
uggs clearance
michael kors outlet
michael kors outlet online
pandora jewelry
canada goose uk
burberry outlet canada
mulberry bags
canada goose outlet
north face outlet
moncler outlet
coach factory outlet
coach outlet
nfl jerseys wholesale
ugg boots
hermens bags
north face jackets
michael kors outlet
pandora charms uk
adidas nmd
columbia sportswear
ugg shoes
adidas shoes
supreme new york
coach outlet online
ugg outlet
ray ban sunglasses
burberry outlet
burberry outlet
cheap jordans
salvatore ferragamo shoes
nike outlet
longchamp uk
coach factorty outlet
ugg outlet
ugg boots
michael kors handbags
kate spade handbag
nike shoes
michael kors outlet clearance
coach factory outlet
air max 2018
canada goose jackets
ugg outlet store
hermes birkin
ugg outlet
ugg ustralia
longchamp handbags
ralph lauren outlet
louis vuitton outlet
michael kors outlet clearance
ugg outlet
canada goose outlet
cheap uggs
ugg boots
nike outlet online
moncler outlet
adidas yeezy
canada goose outlet
canada goose outlet
ray ban sunglasses
coach factory outlet
north face jackets
christian louboutin outlet
nike shoes for men
michael kors outlet
canada goose sale
louis vuitton outlet
yeezy boost
ugg outlet
ugg outlet
longchamp handbags
michael kors outlet
gucci outlet
ferragamo shoes
kate spade bags
coach outlet
coach outlet
air max 97
nike air max
canada goose outlet
cheap ray bans
canada goose jackets
coach canada
ugg outlet
moncler
canada goose jackets
red bottom shoes
air jordans
yeezy boost 350
canada goose jackets
red bottoms shoes
pandora charms
ultra boost
cheap jordans
nike outlet
pandora charms
coach factory outlet
canada goose
fitflops sale
valentino shoes
michael kors outlet
coach outlet
moncler outlet
canadian goose
adidas yeezy boost
ray ban sunglasses
air jordans
cheap uggs
ugg boots
adidas superstar
ralph lauren outlet
canada goose outlet
nike zoom
moncler uk
coach outlet store
moncler outlet
coach outlet
jordans
fitflops sale clearance
ugg boots
kate spade outlet store
coach factory outlet
adidas nmd
ugg boots
coach outlet
ugg boots
cheap ray ban sunglasses
oakley sunglasses
nmd adidas
pandora
polo ralph lauren outlet
ray ban sunglasses
nike store
polo ralph lauren
burberry outlet store
kate spade outlet
cheap uggs
cheap nfl jerseys
yeezy 350 boost
moncler jackets
polo ralph lauren outlet
pandora outlet
coach factory outlet
cat boots
pandora charms
pandora jewelry outlet
canada goose
michael kors handbags
canada goose outlet
canada goose jackets
oakley sunglasses
adidas shoes
christian louboutin
pandora store
kate spade outlet
canada goose uk
michael kors outlet
ralph lauren outlet
adidas yeezy
nmd adidas
ralph lauren sale clearance
birkenstock sandals
burberry sale
north face outlet
180111yueqin
profil | AIM | edit | quote
Newtopic | Reply

Online : AlfredNubre, amoncemo, amudximoelose, atixuzavanma, atoezemagl, aweofrih, azeyanse, Danielnum, eebyipervaj, egamulikeziys, ekesewewu, ekuhapu, FmfcWrife, imuzapbuviruc, ipafunok, KevinRox, lokooxeuqa, obudebyea, ohapatiim, oisaysanx, PozhoginaComma, ReabcaoNah, selekex, uumiruth et 96 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page