MySQL : optimisation MySQL : sur le "order by"

Voilà une manière efficace d’accélérer de manière hallucinante les requêtes qui ont, dans le résultat explain, un extra qui est : USING filesort. Cet extra ralenti énormément la requête.

La solution est très simple : les colonnes de la clause ORDER BY doivent se retrouver dans le WHERE : voilà, dans l’exemple qui suit, col1 et col3 qui sont des indexes. S’ils n’apparaissent pas des deux côtés, alors, il y a l’horrible USING filesort :


mysql> EXPLAIN SELECT * FROM testtab
WHERE col1 > 50000 AND col1 < 150000 ORDER BY col3;
Extra: USING WHERE; USING filesort
mysql> EXPLAIN SELECT * FROM testtab
WHERE col1 > 50000 AND col3 < 20000 ORDER BY col3;
Extra: USING WHERE
mysql> EXPLAIN SELECT * FROM testtab
WHERE col3 < 20000 AND col1 > 50000 ORDER BY col3;
Extra: USING WHERE
mysql> EXPLAIN SELECT * FROM testtab WHERE col3 < 20000
ORDER BY col3;
Extra: USING WHERE
mysql> EXPLAIN SELECT * FROM testtab WHERE col3 < 20000
ORDER BY col1;
Extra: USING WHERE; USING filesort
mysql> EXPLAIN SELECT * FROM testtab WHERE col1 < 20000
ORDER BY col1;
Extra: USING WHERE
mysql> EXPLAIN SELECT * FROM testtab WHERE col1 < 20000
ORDER BY col3;
Extra: USING WHERE; USING filesort

MySQL : mémo perso : Requête qui sélectionne les id (emprunts/dm/produit/formule/compagnie/garantie)

Je ne sais pas à qui ce post pourrait servir… mais bon.
SELECT I.ID,IE.ID,DM.ID,IEF.ID,
IEF.IDSRCPRODUIT,IEF.IDSRCFORMULE,
IEF.IDSRCCOMPAGNIE,IEFG.IDSRCGARANTIE
FROM INTERNETPROPOSANT I
JOIN INTERNETEMPRUNT IE
ON I.ID=IE.IDINTERNETPROPOSANT
JOIN INTERNETEMPRUNTDECISIONMEDICALE DM
ON IE.ID=DM.IDINTERNETEMPRUNT
JOIN INTERNETEMPRUNTFORMULE IEF
ON DM.ID=IEF.IDINTERNETEMPRUNTDECISIONMEDICALE
JOIN INTERNETEMPRUNTFORMULEGARANTIE IEFG
ON IEF.ID=IEFG.IDINTERNETEMPRUNTFORMULE
ORDER BY I.ID,IE.ID,DM.ID,IEF.ID,
IEF.IDSRCPRODUIT,IEF.IDSRCFORMULE,
IEF.IDSRCCOMPAGNIE,IEFG.IDSRCGARANTIE;

Geek : mon n. de téléphone Freebox

Lorsque Free a mis en place son système de téléphonie, il était possible de choisir son numéro de téléphone. Voilà ce qu’il fallait faire, en pratique : aller sur le site de free, s’identifier, puis essayer de taper les 6 derniers numéros afin de savoir s’ils avaient un numéro comme celui-ci libre. Je ne vous raconte pas ceux qui ont dû essayer « 000000 », « 111111 » etc, qui, bien évidemment, n’étaient plus libres depuis belle lurette. Lorsqu’on tapait ce numéro, le résultat était « il n’y a pas de numéro possible avec ces chiffres. Par contre, nous avons trouvé ces numéros approchants » puis s’ensuivait une liste de quelques 3/4 numéros de téléphone. Je me suis dit : « bon sang, en y réfléchissant bien on doit bien pouvoir tester toutes les combinaisons ». J’ai donc développé un bout de programme qui est allé s’identifier, se connecter, puis a essayé toute la nuit toutes les combinaisons possibles. Déjà, c’est du temps passé que seul un geek peut prendre. Pour tous les autres, ça ne sert à rien. Attendez ce n’est pas tout. Mon programme a trié tous les numéros, et a généré un fichier Excel. Au final, j’avais toute la liste des numéros libres de free. J’ai choisi un numéro que j’ai trouvé assez facile à retenir, il s’apparente fortement à quelque chose comme ça : 09 72 56 56 55.

Un geek qui va faire ses courses… vite

Nous avons un énorme Carrefour qui a terminé une restructuration complète du parking.
A chaque fois que je vais faire les courses, je constate une chose : tous les gens, disons 99 % des gens, se garent en bas, ou au premier étage. Jamais au second (le dernier) !
C’est d’une stupidité monumentale. Ils attendent en bas qu’une place se libère, parce qu’au moins « ils évitent les escaliers roulants »…
Ils ne semblent pas avoir intégré deux choses :

  1. Lorsqu’on arrive avec le chariot sur les escaliers, on ne fait aucun effort, celui-ci monte tout seul ;
  2. Si on n’a pas de chariot c’est incroyablement plus rapide : quand on fait un pas sur les escaliers roulants, c’est comme si on en faisait deux sans : on va deux fois plus vite.

Donc quand j’ai trois choses à acheter, je vais immédiatement en haut. Il y a toujours de la place ! J’ai deux escaliers à descendre. Comme je vais deux fois plus vite, au résultat, la distance que je parcours est exactement la même que si je m’étais garé en bas ou au premier.
Ce qui m’atterre, c’est le samedi, tout est plein à craquer, les gens attendent les uns les autres, ils klaxonnent et s’énervent aux deux premiers étages, alors qu’il n’y personne en haut. Est-ce que je suis un geek ou est-ce que j’ai un peu plus de bon sens que la normale ?
Toujours est-il que je fais les courses le samedi plus vite que toutes les personnes que je connais… et en pratique, je les fais aussi vite que tous les autres jours !

Inès vomit toujours tout court. Verbe conjugué au présent.

Je viens à peine de terminer mon post précédent que ma nini gémit dans le babyphone, je me lève, j’y vais elle commence à se tourner en gémissant dans tous les sens dans le lit, je la prends sur mes épaules et là « bouraglklk » elle vomit. Je suis extrêmement inquiet. Arrivée à la maison ce soir elle était déjà livide, parce qu’elle n’avait presque rien mangé de la journée, et de savoir qu’elle a vomi le peu qu’elle avait mangé, ça fait globalement une journée complète sans manger, plus deux jours en mangeant très peu, pour une enfant de 16 mois ça commence à faire un sacré jeune. Inquiet, je suis très inquiet. Ah tiens en même temps que je tape, Sandrine vient de s’asseoir avec la cuvette entre les mains dans le salon. C’est un moment super sympa à passer, je vous le dis mes amis !

Inès vomit depuis maintenant 3 jours…

Ce soir j’ai été la chercher, je suis très inquiet, elle était livide. C’est normal, dès qu’elle ingurgite quelque chose, elle a envie de vomir, donc elle ne mange rien. Elle fait juste la foire à table, ce qui est difficile à gérer : on ne peut pas la gronder, on ne peut pas non plus la forcer à manger… et ce soir j’ai eu le bouquet final, le feu d’artifice, la totale : Sandrine est malade. Elle a exactement les mêmes symptômes à savoir qu’elle vomit très rapidement. Quand je dis très rapidement, elle était couchée, et s’est levée pour aller aux toilettes, elle n’a pas eu le temps de les atteindre… vous voyez le tableau. Donc, je travaille toute la soirée, et quand je ne travaille pas, j’essuie le vomi. Elle est pas belle la vie ? Heureusement, je fais une super pause : je fais un post sur mon blog !

La mère de Sandrine qui l’a vue hier, a dit avec beaucoup de peine, qu’Inès a essayé d’aller jusqu’au salon pour jouer, comme elle fait d’habitude, mais qu’elle n’a pas réussi, parce que ses jambes flageolaient et elle est tombée plusieurs fois. De quoi être un peu inquiet non ?

Inès a vomi toute la nuit…

Nous étions contents, c’est la première nuit où Inès dormait enfin bien ! Eh bien nous nous sommes réveillés de matin tôt, à 5h50 et Sandrine a vu que sous la tête de notre nini, c’était trempé. Elle l’a laissé dans notre lit, le temps de changer les draps et le reste, et on l’a recouché. Une demi heure plus tard, elle re-pleure. Comme deux nuits très difficiles venaient de se passer, et que sur la fin de la dernière nuit, madame Inès, à quatre heures, pleurait en faisant vraiment un gros cinéma (elle m’a fait rire, même avec la fatigue qui me rend très irritable en faisant des « wouaaaaah » de la fille qui commence à pleurer puis en finisssant sur des tests de vocalise, et des « blbblblblblbllblblblblb » pour s’amuser), j’ai cru qu’elle recommencait et faisait du cinéma. J’ai donc dit bien fort « dodo, papa fait DODO ! »… En réalité elle avait vomi… Tout le monde fait des erreurs ! Je pense qu’elle a une bonne gastro-entérite.