如何降低sql查询的成本



我使用SQL COUNT查询,但查询成本要高得多。表中添加了索引,但对查询成本没有影响。查询:

SELECT COUNT(direction) AS directionCount,  direction, destination_addr, record_timestamp
FROM traffic_direction WHERE destination_addr='10.255.2.11' 
GROUP BY  destination_addr, direction ORDER BY record_timestamp DESC limit 10

使用Explain获取查询成本,该成本为:

"cost_info": {
"query_cost": "14158682.20"
}

首先,您的查询格式不正确,应该返回语法错误。为什么?SELECTGROUP BY不一致——因为record_timestamp未聚合。因此,将查询写成:

SELECT COUNT(*) AS directionCount, direction, 
destination_addr, MAX(record_timestamp)
FROM traffic_direction
WHERE destination_addr = '10.255.2.11' 
GROUP BY destination_addr, direction
ORDER BY record_timestamp DESC 
LIMIT 10;

不过,这不会影响性能。

你唯一能做的就是在traffic_direction(destination_addr, direction, record_timestamp)上创建一个索引。

MySQL可能不会将其用于GROUP BY,并且您仍然会为ORDER BY带来排序的开销。但它将有助于过滤数据,并消除访问数据页面的需要。

最新更新