84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
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