文档章节

大数据之数据库mysql优化实战之索引的使用

BKC
 BKC
发布于 2016/03/28 15:04
字数 741
阅读 47
收藏 5

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

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

索引在什么情况下使用

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

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

本文转载自:http://my.oschina.net/budaoniu/blog/648486

BKC

BKC

粉丝 2
博文 32
码字总数 35753
作品 0
朝阳
程序员
私信 提问
这份MySQL索引实践清单,已超300人在学习,推荐你看看

特邀嘉宾 叶 金 荣 知数堂联合创始人 & 3306π社区负责人 MySQL优化课程讲师 资深MySQL专家,Oracle MySQL ACE,曾任职搜狐畅游DBA主管,精通MySQL数据库,10年以上MySQL相关工作经验,擅长M...

n88lpo
2018/05/25
0
0
不懂MySQL索引优化?甩你这份清单别嫌多

周四见 公开课系列 We,知数堂 习惯用实力介绍自己—我们只分享干货 重磅福利来袭 2018年5月24日,20:30-21:30 周四见 不见不散! 主讲嘉宾:叶金荣 知数堂联合创始人 & 3306π社区负责人 资深...

n88lpo
2018/05/24
0
0
周四见|《MySQL索引最佳实践》by叶金荣

周四见 公开课系列 We,知数堂 习惯用实力介绍自己—我们只分享干货 重磅福利来袭 2018年5月24日,20:30-21:30 周四见 不见不散! 主讲嘉宾:叶金荣 知数堂联合创始人 & 3306π社区负责人 资深...

n88lpo
2018/05/22
0
0
MySQL架构优化实战系列4:SQL优化步骤与常用管理命令

1、查看MySQL状态及配置 show status 查看当前连接的服务器状态 show global status 查看MySQL服务器启动以来的状态 show global variables 查看MySQL服务器配置的变量 增删改的统计 查看 in...

2016/09/02
0
0
周四见|《SQL开发中容易被忽略的BUG》by郑老师

周四见 免费公开课系列 We,知数堂 习惯用实力介绍自己—我们只分享干货 重磅福利来袭 2018年4月19日,20:30-21:30 周四见 不见不散 主讲嘉宾 郑老师 知数堂《SQL优化》课程讲师 资深数据库工...

n88lpo
2018/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
5
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部