Améliorations de l’optimiseur dans MariaDB

janvier 9, 2012

Les équipes de MariaDB ont énormément travaillées sur l’optimiseur de la version 5.3, notamment en permettant une réelle utilisation des sous-requêtes.

Voici un effet visuel de ces optimisations:

Avec MySQL 5.5, l’utilisation de tables dérivées (type de sous-requêtes dans la clause FROM d’un SELECT), donne le plan d’exécution suivant:

MySQL-5.5 > EXPLAIN SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c \G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: <derived2>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:
*************************** 2. row ***************************
id: 2
select_type: DERIVED
table: <derived3>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:
*************************** 3. row ***************************
id: 3
select_type: DERIVED
table: ccc
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:

 

Le même EXPLAIN avec MariaDB 5.3 donne:
MariaDB-5.3 >  EXPLAIN SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: ccc
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra:

L’optimiseur comprend que les 2 niveaux de « SELECT * FROM » ne servent à rien, et réécrit donc la requête.

L’intérêt n’est heureusement pas que visuel:

Sur MySQL 5.5:

mysqlslap –create-schema=world -i10 -q »SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c ; » -S/tmp/mysql_55.sock
Benchmark
Average number of seconds to run all queries: 0.004 seconds

 

Sur MariaDB 5.3:
mysqlslap –create-schema=world -i10 -q »SELECT * FROM (SELECT * FROM (SELECT * FROM City ccc ) cc ) c ; » -S/tmp/mariadb_53.sock
Benchmark
Average number of seconds to run all queries: 0.002 seconds

Le test étant réalisé sur un petit volume de données, le temps écoulé n’est pas très important, cependant l’on peu noter que l’optimisation apporté par MariaDB, divise le temps d’exécution par 2 dans ce contexte (à conf équivalente, données équivalentes,…).

 

D’autres tests s’imposent, mais l’on peut déjà féliciter les équipes de MariaDB

 

http://dimitrik.free.fr/blog/archives/2016/02/mysql-performance-scalability-on-oltp_rw-benchmark-with-mysql-57.html

One Response to “Améliorations de l’optimiseur dans MariaDB”

  1. Effectivement, d’autres tests s’imposent 🙂
    Et on les attend !
    A+