大数据之数据库mysql优化实战之索引的使用
2016-03-28 00:00
791 查看
摘要: 大数据之数据库mysql优化实战(二)之索引的使用
大家带着问题,去看下面的段落
索引在什么情况下使用
如何使用索引
表行数少,使用查询次数少,update少
由上面的加粗字体的测试时间结果可以看来10W条数据利用索引查询效率也没啥优势,还平白的多了磁盘占用空间
说明,上面的例子详细讲解了使用*和不使用的区别,以及创建索引和删除索引,还有如何清除缓存。
ps:下一章为大家带来索引的高级篇实战,有兴趣加qq群交流:181666459
大家带着问题,去看下面的段落
索引在什么情况下使用
如何使用索引
索引在什么情况下使用
以下是不使用索引的情况表行数少,使用查询次数少,update少
RESET QUERY CACHE; **#未创建索引:时间:0.227s/1W条 , 0.331s/5W条,0.516s/10W** #SELECT max(ObuID) FROM `ETCBlackList11` etc where ObuID<1130000000045617 #查询有多少条行数 #select count(*) from (select * FROM ETCBlackList11 where ETCBlackList11.ObuID < 1130000000001917) t; #SELECT * FROM `ETCBlackList11` etc where etc.ObuID<1130000000001917; #创建索引,不要用主键,主键是特殊的索引 #create index index_ObuID on etcblacklist11(ObuID); **#创建索引:时间:0.206s/1W条 , 0.309s/5W条,0.503s/10W** SELECT * FROM `ETCBlackList11` etc where etc.ObuID<1130000000045617;
由上面的加粗字体的测试时间结果可以看来10W条数据利用索引查询效率也没啥优势,还平白的多了磁盘占用空间
如何使用索引
直接看sql语句#10000条的查询时间为0.040s #SELECT * FROM `ETCBlackList11` etc where etc.ID<10000; # 一定要清除缓存,否则测试时间不准确, #默认 query_cache 是打开的 #第一种:你使用 show global variables like '%query_cache%'; #确认一下有没有打开,如果打开了。第一次查询读数据文件,第二次就会走query_cache,所以就会很快。当然 ,如果数据更新了,要重新再缓存。 #第二种情况 ,查询表引擎:show variables like '%storage_engine%', 表引擎使用innodb.第一次查询也会走数据文件,第二次直接走buffer_pool, #也比直接查询数据文件要快 以下是两种方式清除缓存 RESET QUERY CACHE; #FLUSH TABLES; #总计行数10W条数据, 使用*号所用时间是0.695秒 #select * from ETCBlackList11 where ETCBlackList11.IssuerID > 1120000000000001; #使用全字段名 所用时间是0.729s,减去一般的字段只需0.341s #select ETCBlackList11.ID,ETCBlackList11.CARDID,ETCBlackList11.IssuerID,ETCBlackList11.License,ETCBlackList11.LicenseName, #ETCBlackList11.LicenseNameA,ETCBlackList11.LicenseNameB,ETCBlackList11.NetNo,ETCBlackList11.ObuID,ETCBlackList11.strID, #ETCBlackList11.strtime1,ETCBlackList11.strtime2,ETCBlackList11.strTmp1,ETCBlackList11.strTmp2,ETCBlackList11.strTmp3, #ETCBlackList11.strTmp4 from ETCBlackList11 where ETCBlackList11.IssuerID > 1120000000000001; #将IssuerID字段创建索引查询时间为0.462s #创建索引 #CREATE INDEX idx_IssuerID ON ETCBlackList11(IssuerID); #删除索引 ALTER TABLE ETCBlackList11 DROP INDEX idx_IssuerID; #说建了索引反而会比不建所以更慢,如果这个字段的值变化区间很大,那么建了索引比不建索引更快,当然也不是索引越多越好 #经常插入、删除、修改的表,对一些经常处理的业务表应在查询允许的情况下尽量减少索引 #select ETCBlackList11.ID,ETCBlackList11.CARDID,ETCBlackList11.IssuerID,ETCBlackList11.License,ETCBlackList11.LicenseName, #ETCBlackList11.LicenseNameA,ETCBlackList11.LicenseNameB,ETCBlackList11.NetNo,ETCBlackList11.ObuID,ETCBlackList11.strID, #ETCBlackList11.strtime1,ETCBlackList11.strtime2,ETCBlackList11.strTmp1,ETCBlackList11.strTmp2,ETCBlackList11.strTmp3, #ETCBlackList11.strTmp4 from ETCBlackList11 where ETCBlackList11.IssuerID > 1120000000000001;
说明,上面的例子详细讲解了使用*和不使用的区别,以及创建索引和删除索引,还有如何清除缓存。
ps:下一章为大家带来索引的高级篇实战,有兴趣加qq群交流:181666459
相关文章推荐
- 笑傲大数据时代,你必须要知道的41个Scala实战技能!
- Scala-Trait:混入与多态
- 使用行为树(Behavior Tree)实现游戏AI
- LeetCode: Palindrome Pairs
- 云计算的三种服务模式:IaaS,PaaS和SaaS
- 如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系?
- 十个值得一试的开源深度学习框架
- HDU4012 Paint on a Wall(BFS)
- 李开复:AlphaGo证明了人工智能发展超过我们想象
- 李开复:AlphaGo证明了人工智能发展超过我们想象
- hdoj--1789--Doing Homework again(贪心模拟)
- 10007---Trail ~ Populating the Data Model
- RAID基础及软RAID实现方式
- 关于aircrack-ng的一些学习笔记及问题
- 我的C++实践(4):trait与policy模板技术http://blog.csdn.net/zhoudaxia/article/details/4486487
- typeof、offsetof、container_of
- 10006---Trail ~ Integration in the hMC
- 安装mountaion lion无法挂载镜像
- codeforces 652C Foe Pairs 水题
- codeforces 579A Raising Bacteria