Etrange MySQL

Aujourd’hui, j’ai décidé d’optimiser une recherche MySQL de recherche par proximité de points spatiaux. En effet, j’avais une requête qui prenait 250 ms en moyenne.

Je recherche donc quelques infos et là, bonne surprise je tombe sur un document issu de l’entreprise MySQL sur le sujet. En utilisant l’optimisation qu’ils recommandent (par approximation préalable en un carré de recherche), j’arrive à réduire les requêtes à des temps allant de 5 à 35 ms.

Et puis, je finis de lire le document et je m’aperçois que MySQL possède une extension spatiale. Je regarde donc, ça se base sur les R-Tree, là je sens que j’ai trouvé la solution parfaite. Mais NON, les R-Tree ne sont disponible qu’en MyISAM. La création d’index spatiaux est interdite en InnoDB.

Et c’est comme ça tout le temps. Ca a commencé avec les index FULLTEXT non disponibles en InnoDB. On a le choix entre avoir une base de données peu solide et une base de données moins complète (mais vraiment super solide). Il existe bien sur des solutions, comme de dédoubler ses tables en InnoDB et MyISAM pour obtenir des index FULLTEXT.

MySQL a par ailleurs des trucs assez étranges dans ses requêtes. Je me souviens m’être retrouvé coincé avec une jointure bien paramétrée qui était 20 fois plus lente qu’une sous-requête.

Il y a aussi le « SELECT DISTINCT » qui est, m’a-t-on dit, 3 fois plus lent que « GROUP BY ».

Enfin, je tiens à relativiser cette petite critique. La plupart des personnes, surtout en entreprise, ne connaissent MySQL que pour le moteur MyISAM et le trouvent de fait pourri. Mais peu savent que pour la gestion des données critiques, MySQL avec le moteur InnoDB est parfait. Je ne suis jamais parvenu à obtenir une quelconque corruption des données même après de bonnes maltraitances (coupure de courant en pleine écriture massive). Ses capacités relationnelles et transactionnelles en font un très bon moteur.

Pour l’instant j’ai des tables qui contiennent un peu plus de 10 000 000 lignes et InnoDB tient sans problème, je vous en reparle quand ça atteindra les 20 000 000 lignes.

GD Star Rating
loading...
Posted in French. Tags: . No Comments »