MySQL WHERE substring_index count(*) 效率问题

发布于 2022-09-01 20:53:20 字数 273 浏览 28 评论 0

SELECT SUBSTRING_INDEX(domain,".",-1) as tld, count(*) AS count \
               FROM domain_whois WHERE flag <> -6 GROUP BY tld

domain_whois表中有两个字段,domain 与 flag。domain例:baidu.com, flag例:-6
大约七百万数据,运行上面的数据需要30+s时间,请问有什么技巧可以提高效率?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

偏闹i 2022-09-08 20:53:20

用空间换时间,如果你经常进行这样的查询,增加一个字段tld,在入库的时候直接就运行好SUBSTRING_INDEX的结果,存入这个tld字段

不过由于你这个是全表扫描的,所以这样应该也还不够快,你可以进一步建立一张tld的冗余信息表,两个字段,一个是tld,一个是count数量,入库的时候更新数量,这样如果你要获取诸如com, net的tld的count(*)数据直接读取这个表即可

这是一个相对比较简单和初步优化的方案,记住性能和你怎么样去查询也是息息相关的

始终不够爱げ你 2022-09-08 20:53:20

可以尝试一下在 flag 列加索引,并把WHERE条件换成 flag>-6 or flag<-6

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文