hibou Le 14/05/2006 à 18:08 SELECT heuristiques.resultat FROM instances, heuristiques WHERE heuristiques.temps=100 AND instances.n = 100 AND heuristiques.instance = instances.instance
ca fait longtemps que j'ai pas fait de SQL, mais ca marche pas ca ?
BiHi Le 15/05/2006 à 14:41 ou bien
SELECT heuristiques.resultat
FROM heuristiques
INNER JOIN instances ON instance.instance=heuristiques.instance
WHERE heuristiques.temps=100 AND instances.n = 100

;)
non pas moyen.
au mieux, le SGBD fera l'optimisation tout seul.
Par contre, tu peux à priori faire les 3 requêtes sans avoir recours à une sous requete, ce qui est mieux pour l'optimisation.
(les IN ; NOT IN c'est pas ce qu'il y a de plus rapide)
comment ça, faire les 3 requêtes sans sous-requêtes ?

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
tu as mis ça:
SELECT DISTINCT methode FROM heuristiques WHERE temps = 100 AND heuristiques.instance IN (SELECT instances.instance FROM instances
WHERE instances.n=100
Je suggère:
select distinct methode
from heuristiques h,instances i
where
h.instance=i.instance
and h.temps=100
and i.n=100
ok, merci. il y a une raison particuilière pour laquelle ça optimise mieux ?

<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Nil Le 16/05/2006 à 21:12 Tu peux toujours copier la table dans une table en RAM (type HEAP à choisir lors de la création de la table) et non sur disque s'il ne risque pas d'y avoir de modifications critiques sur la table d'origine. Ca peut te permettre d'avoir une plus grande réactivité, mais ça n'est intéressant que s'il y a énormément d'accès, si c'est une table principalement en lecture... et il faut la reconstruire à chaque redémarrage du serveur mySQL. Ca ne répond pas forcément à ta demande, mais ça peut être une solution en cas d'accès en nombre.

Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.
Nil Le 16/05/2006 à 21:14 Par rapport à l'optimisation de Microbug, c'est simplement que ce qui est le plus long dans une table, c'est le SELECT. Si tu fais un SELECT imbriqué, tu ralentis ton opération. D'ailleurs, quand on fait du relationnel, on évite au maximum les requêtes imbriquées.

Pas tout à fait là, pas tout à fait la personne que vous croyez connaître.
ce qui justifie mon optimisation d'après moi, c'est aussi le IN avec une sous requete qui est lent... très lent.
Surtout quand il commence à y avoir pas mal de lignes dans les tables, comme ça semble être ton cas.
10000, c'est peu, pour une base de données.

I'm on a boat motherfucker, don't you ever forget
euh ... mysql est très performant hein.

I'm on a boat motherfucker, don't you ever forget
Je pense que mysql est peu développé en entreprises plus par manque de features que par manque de performances brutes pour les choses qu'il sait faire.

I'm on a boat motherfucker, don't you ever forget
Les index permettent d'accéder plus rapidement aux données.
En général, elles sont stockées sous forme d'arbres (mais ça dépend des SGBD) indexés par des clés.
Quand tu crées une table, elle est stockée en utilisant la clé primaire comme index.
Mais tu peux rajouter des index sur d'autres champ, s'ils sont souvent sollicités dans les clauses WHERE de tes requêtes, ça accélérera le temps de recherche des lignes correspondantes.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
oui mais si il n'a pas non plus défini de clé, ben y a pas d'index non plus. (oui y a deux fois non plus, mais c'est normal, chacun a son sens dans la phrase ^^)

I'm on a boat motherfucker, don't you ever forget