84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
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时间,请问有什么技巧可以提高效率?
人生最曼妙的风景,竟是内心的淡定与从容!
用空间换时间,如果你经常进行这样的查询,增加一个字段tld,在入库的时候直接就运行好SUBSTRING_INDEX的结果,存入这个tld字段
不过由于你这个是全表扫描的,所以这样应该也还不够快,你可以进一步建立一张tld的冗余信息表,两个字段,一个是tld,一个是count数量,入库的时候更新数量,这样如果你要获取诸如com,net的tld的count(*)数据直接读取这个表即可
com
net
这是一个相对比较简单和初步优化的方案,记住性能和你怎么样去查询也是息息相关的
可以尝试一下在 flag 列加索引,并把WHERE条件换成flag>-6 or flag<-6
flag>-6 or flag<-6
用空间换时间,如果你经常进行这样的查询,增加一个字段tld,在入库的时候直接就运行好SUBSTRING_INDEX的结果,存入这个tld字段
不过由于你这个是全表扫描的,所以这样应该也还不够快,你可以进一步建立一张tld的冗余信息表,两个字段,一个是tld,一个是count数量,入库的时候更新数量,这样如果你要获取诸如
com
,net
的tld的count(*)数据直接读取这个表即可这是一个相对比较简单和初步优化的方案,记住性能和你怎么样去查询也是息息相关的
可以尝试一下在 flag 列加索引,并把WHERE条件换成
flag>-6 or flag<-6