2013-06-27 71 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(僅在v5.6.5中添加)或min_examined_row_limit服務器選項進行操作。

後者存在於會話級別。在查詢之前,它可能會增加到一個非常大的值,而不會影響併發連接。令人驚訝的是,沒有特殊的特權是必需的。