mysql - 有什么改进 MySQL 查询的技巧吗?

标签 mysql performance indexing query-optimization

我有一个包含 50 万行的表,如下所示:http://d.pr/njFJ

enter image description here

像这样的查询有时通常需要超过 2 秒:

SELECT * 
FROM `alerts` 
WHERE `a_timestamp` > '2012-04-15' AND `a_timestamp` <= '2012-04-16'  
   AND a_company_id IN(64,65,69,70,71,72,73,74,75,76,83,86,106,108,109,116,148) ORDER BY a_id DESC

这是解释查询:http://d.pr/z20b

enter image description here

有人可以指出我做错了什么吗?也许我错过了什么。这么小的 table 应该花那么多时间吗?

最佳答案

正如 KingFisher 提到的,去掉 IN 子句(这通常是查询性能的瓶颈)并用 JOIN 替换它,但不要使用临时的表,这是你如何做的:

SELECT alerts.* FROM (
    (SELECT 64 AS id) UNION (SELECT 65) UNION (SELECT 69) UNION (SELECT 70)
    UNION (SELECT 71) UNION (SELECT 72) UNION (SELECT 73) UNION ...
) AS ids
INNER JOIN alerts ON (ids.id = alerts.a_company_id)
WHERE alerts.a_timestamp > '2012-04-15' AND alerts.a_timestamp <= '2012-04-16'
ORDER BY ids.id DESC

并确保您在 a_company_id 上有一个索引。

关于mysql - 有什么改进 MySQL 查询的技巧吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164722/

相关文章:

php - 使用ajax从数据库中获取信息

mysql - 如何在 VBA 中使用 SQL 从表中检索特定值

android - 缩放到高分辨率时绘制位图很慢

mysql - 在表中查找常见行的最佳方法是什么

php - 捕获mysql数据库错误并在php中使用

mysql - 插入选择查询

performance - 为什么 putImageData 这么慢?

javascript - 使用 jQuery 更改列表元素索引

sql-server - 是否需要在 SQL Server 中的多字段主键上创建索引?

python - neo4jrestclient 索引结果返回 Iterable 而不是 node/url?