2013-06-27 2 views
2

Как избежать этого запроса для регистрации при включении --log-queries-not-using-indexes?Избегайте запроса RAND() из медленного журнала запросов

(source of the query)

EXPLAIN SELECT id,autor,description 
FROM (
     SELECT @cnt := COUNT(*) + 1, 
       @lim := 3 
     FROM testimonale 
     ) vars 
STRAIGHT_JOIN 
     (
     SELECT r.*, 
       @lim := @lim - 1 
     FROM testimonale r 
     WHERE (@cnt := @cnt - 1) 
       AND RAND() < @lim/@cnt 

     ) i; 

EXPLAIN

id select_type table  type possible_keys key key_len ref rows Extra       
1 PRIMARY  <derived2> system         1         
1 PRIMARY  <derived3> ALL          3         
3 DERIVED  r   ALL          8  Using where     
2 DERIVED                 Select tables optimized away 
+0

SET sql_log_bin = 0; запрос SET sql_log_bin = 1; ? – Dave

+1

также может выполнять SET log_queries_not_using_indexes = 0; а затем установите его на 1, вместо этого вам придется искать фактическое имя переменной sql, но это что-то вроде выше. – Dave

+0

Вы спрашиваете, как сделать этот запрос индексом? – RandomSeed

ответ

1

Я не знаю, о какой-либо возможности отключить протоколирование отдельных запросов. log_queries_not_using_indexes является глобальным, и его изменение «на лету» предотвратит ведение журнала любых параллельных запросов (хотя я понимаю, что это маловероятно, если запрос быстрый).

Поскольку вы действительно хотите снизить нагрузку, вызванную этим протоколированием, вы можете играть с log_throttle_queries_not_using_indexes (добавлено только в версии v.5.6.5) или сервером min_examined_row_limit.

Последний существует на уровне сеанса. Это может быть увеличено до абсурдно большого значения непосредственно перед вашим запросом, без какого-либо влияния на одновременные подключения. Удивительно, но особых привилегий не требуется.

Смежные вопросы