2017-06-26 48 views
0

索引列的病情,我有一个非常简单的SQL where语句不良的SQL性能,其中对在MySQL

SELECT `genre_application`.`genre_id` 
     FROM `genre_application` 
     WHERE `genre_application`.`application_id` = 310633997 

这需要2秒左右,即使在列索引。

{ 
"query_block": { 
"select_id": 1, 
"cost_info": { 
    "query_cost": "2098202.80" 
}, 
"table": { 
    "table_name": "genre_application", 
    "access_type": "index", 
    "key": "PRIMARY", 
    "used_key_parts": [ 
    "genre_id", 
    "application_id" 
    ], 
    "key_length": "8", 
    "rows_examined_per_scan": 10363019, 
    "rows_produced_per_join": 1036301, 
    "filtered": "10.00", 
    "using_index": true, 
    "cost_info": { 
    "read_cost": "1890942.42", 
    "eval_cost": "207260.38", 
    "prefix_cost": "2098202.80", 
    "data_read_per_join": "23M" 
    }, 
    "used_columns": [ 
    "genre_id", 
    "application_id" 
    ], 
    "attached_condition": "(`genre_application`.`application_id` = 310633997)" 
} 
} 

我该如何提高执行时间?

回答

3

这是您的查询:

SELECT ga.`genre_id` 
FROM `genre_application` ga 
WHERE ga.`application_id` = 310633997 

您需要的指数,其中application_id是在索引中的第一项。最佳指数是genre_application(application_id, genre_id)上的综合指数。请注意,索引中键的顺序很重要。

+1

哇,这是一个快速回复。 Works perfect 00:20:00 \t SELECT'genre_application'.'genre_id' FROM'genre_application' WHERE'genre_application'.'application_id' = 310633997 LIMIT 0,300 \t 2行返回\t 0.00036秒/ 0.0000079秒 – dc10

+0

@ dc10。 。 。非常好。加快99.982%! –

+0

闻起来像查询缓存踢了。但我同意这是最佳索引。 –