首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在mysql中使用WHERE子句时,count()会占用很多时间

当在mysql中使用WHERE子句时,count()会占用很多时间
EN

Stack Overflow用户
提问于 2018-01-15 17:43:11
回答 2查看 148关注 0票数 1

表中大约有100000条记录(元组)。没有where子句,它只需要几毫秒,而当使用where子句时需要4-5秒。

代码语言:javascript
复制
SELECT COUNT(DISTINCT id) FROM tablename WHERE shippable = '1'

我也试过这个,但它比前一个花了更多的时间。

代码语言:javascript
复制
SELECT count(rowsss) FROM (SELECT count(*) as rowsss FROM tablename WHERE shippable = '1' GROUP BY id) as T

这是在启动mysql查询之前使用EXPLAIN关键字时的输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-15 17:45:17

如果你需要一个过滤器,你可以在可发货上使用索引,例如:

代码语言:javascript
复制
 create index shippable_ixd on tablename (shippable);

这样,对表的扫描仅限于与整个表匹配的值,从而避免了对整个表的扫描

根据您还需要列id这一事实,您也可以尝试使用复合索引

代码语言:javascript
复制
 create index shippable_ixd on tablename (shippable, id);

sqloptimizer应该直接从索引中检索所需的信息。

在这种情况下,使用复合索引(具有不需要where子句的冗余id )很有用,因为SQL引擎只需扫描索引即可检索查询所需的所有数据,从而避免访问表中的数据。该技术经常用于数据库查询调优。

票数 6
EN

Stack Overflow用户

发布于 2018-01-15 19:14:16

当您检查任何条件时,时间和值应该是相同的类型,那么查询的执行将是快速的。

代码语言:javascript
复制
SELECT count(rowsss) FROM (SELECT count(*) as rowsss FROM tablename WHERE CAST(shippable  AS CHAR) = '1' GROUP BY id) as T
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48260336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档