我有一个非常复杂的SELECT
,其中包含7个inner joins
和至少13个变量WHERE
条件。
我创建了存储过程来控制这个选择和搜索条件。对于每次搜索,我需要获取所选条件的总记录数,因此我重复SELECT并将其更改为具有相同连接和条件的SELECT COUNT(*)。
在存储过程中没有select COUNT(*)
,它会在 5ms 中搜索260,000条记录。
在存储过程中使用select COUNT(*)
,它会在 122ms
有没有办法加快这个过程?我需要得到这个总数,问题是是否有一个选项可以让它更快。
答案 0 :(得分:1)
没有COUNT的查询更快的原因可能是因为数据库不需要实际找到所有结果来返回前20个。
我不认为这个问题有一个很好的通用解决方案......但是也许你可以将COUNT限制在一些大的限制...比如说1001?如果您获得1001,那么您的用户界面可能会说“超过1000个结果......”并允许用户进一步限制查询?
答案 1 :(得分:0)
我不知道为什么计数在你的查询中会很慢,但是为了快速修复,也许你最好计算程序中返回的行。如果您将结果返回到数组或某种类型的列表,则可以使用“.Count()”(如果它是.NET,则为..)
编辑: 确保所有已连接的表都使用主键和索引列进行查询。