mysql - 是否可以通过 distinct 来提高查询的性能?
问题描述
有以下查询:
"SELECT DISTINCT LEVEL, ID, R1, R2, R3, R4, R5" +
" FROM custom_table +
" WHERE fromDate=:startDate
" AND toDate=:endDate,
" AND AccountIds=[ :accountIds ]
" AND LEVEL IN (:Levels)"
表格的某些列(不包括日期和其他对我们不重要的列):
ID INTEGER NOT NULL,
LEVEL INTEGER,
R1 VARCHAR(50),
R2 VARCHAR(50),
R3 VARCHAR(50),
R4 VARCHAR(50),
R5 VARCHAR(50)
简单数据:
ID,LEVEL,R1,R2,R3,R4,R5
id1,1,TOTAL,null,null,null,null
id1,2,TOTAL,A,null,null,null
id1,2,TOTAL,B,null,null,null
id2,1,TOTAL,null,null,null,null
id2,2,TOTAL,A,null,null,null
id2,3,TOTAL,B,C,null,null
当前查询运行超过 1s,通常返回 100 到 1000 条记录,我想提高这个查询的性能。我试图用GROUP BY
子句重写它,但它是矫枉过正的,因为没有聚合而且它是多余的,我认为。
也许有办法改进这个查询以更快地获取数据?我希望我在这里提供了足够的信息。数据库是自定义的,引擎盖下的 NO_SQL 巨人,但我们的数据库桥的语法与 MySQL 非常相似。
解决方案
您似乎想要一个关于: 的索引 (fromDate, toDate, accountId, levels)
。
前三列都用于=
比较,所以它们可以按任意顺序排列。
推荐阅读
- python - 有没有办法重置 tkinter 树视图中的索引?
- sql - LEFT OUTER JOIN 查询不包含左表的结果
- curl - 使用 zlib 交叉编译 curl:检查 -lz 中的 gzread ... 否
- laravel - REDIS 为 150k 个密钥消耗 20GB 的 RAM
- ruby-on-rails - 向 API 端点发送 POST 请求以接收 stripe_user_id
- c# - Elasticsearch Nest Client - 搜索嵌套属性
- html - 如何将充满预订的日历添加到养老金网站?
- physics - 击中目标所需的角速度
- javascript - 如何使用 Papa 解析器解析本地机器上的 csv 文件?
- hyperledger-fabric - 实例化链码时如何解决“在检索块之前完成上下文:上下文已取消”?