Bien que Pascal est correct dans son CV, son exemple est erronée.
benchmark(10000000000, 'select sql_no_cache id from post where id = 1')
L'énoncé ci-dessus évalue une chaîne une déclaration, et non l'instruction SELECT lui-même. La syntaxe correcte pour la BENCHMARK fonction serait:
benchmark(10000000000, (select sql_no_cache id from post where id = 1))
En outre, au moins en MySQL 5.5.22, en utilisant SQL_NO_CACHE dans la déclaration fournie aux résultats REPÈRES une erreur:
mysql> SELECT BENCHMARK(1000000000,(SELECT SQL_NO_CACHE COUNT(1) FROM players WHERE id=1));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COUNT(1) FROM players WHERE id=1))' at line 1
mysql> SELECT BENCHMARK(1000000000,(SELECT SQL_NO_CACHE id FROM players WHERE id=1));
ERROR 1054 (42S22): Unknown column 'SQL_NO_CACHE' in 'field list'
Cependant , une expérience avec des instructions réelles, une table d'enregistrement de 40000 et un cache de requêtes désactivé confirment que COUNT fonctionnerait un peu plus rapidement que la récupération de l'ID, même si la différence peut être considérée comme négligeable.
mysql> set query_cache_type=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT SQL_NO_CACHE benchmark(1000000000,(SELECT id FROM test WHERE id=1));
+-----------------------------------------------------------+
| benchmark(1000000000,(SELECT id FROM players WHERE id=1)) |
+-----------------------------------------------------------+
| 0 |
+-----------------------------------------------------------+
1 row in set (23.17 sec)
mysql> SELECT SQL_NO_CACHE benchmark(1000000000,(SELECT COUNT(1) FROM test WHERE id=1));
+-----------------------------------------------------------------+
| benchmark(1000000000,(SELECT COUNT(1) FROM players WHERE id=1)) |
+-----------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------+
1 row in set (22.50 sec)