博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大数据之数据库mysql优化实战之索引的使用
阅读量:7099 次
发布时间:2019-06-28

本文共 2485 字,大约阅读时间需要 8 分钟。

  hot3.png

大家带着问题,去看下面的段落

  • 索引在什么情况下使用
  • 如何使用索引

索引在什么情况下使用

  • 以下是不使用索引的情况

表行数少,使用查询次数少,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

转载于:https://my.oschina.net/bkc/blog/648529

你可能感兴趣的文章
菜鸟也可以自己封装万能ghost系统
查看>>
路由心生
查看>>
【python】 倒序输出字符串
查看>>
Spark 2.x kafka LocationStrategies 的几种方式
查看>>
EntboostChat 1.3发布,iOS开源手机IM,恩布IM
查看>>
细粒度的线程控制?使用Lock Condition~
查看>>
把非透明swf动画dreamweaver做成透明背景flash动画方法
查看>>
Servlet个人学习笔记
查看>>
不使用中间变量交换两数的值
查看>>
solr相关查询参数
查看>>
Opencv cvThreshould 函数
查看>>
Oracle_052_lesson_p7
查看>>
PHP设计模式学习笔记: 模版方法
查看>>
实现虚拟机linux共享上网(利用NAT)
查看>>
【MyBatis框架】查询缓存-一级缓存原理
查看>>
ASP.NET MVC设置允许跨域访问
查看>>
CentOS7下Apache2.4.6使用MySQL5.7验证
查看>>
数据库设计规范之命名规范
查看>>
人力资源管理信息系统
查看>>
阿里云的maven代理,比较快
查看>>