首页 > 解决方案 > 是否可以通过 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 非常相似。

标签: mysqlsql

解决方案


您似乎想要一个关于: 的索引 (fromDate, toDate, accountId, levels)

前三列都用于=比较,所以它们可以按任意顺序排列。


推荐阅读