• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql性能调优3-目录相关_mysql

mysql 搞代码 7年前 (2018-06-06) 176次浏览 已收录 0个评论

mysql性能调优3–索引相关
注:原创作品,转载请注明出处。

    众所周知,索引可以加快查询的速度,但有的时候你的一个小不注意索引就失效。 本博文结合实例追根究底研究索引。

前置条件:
   为表达效果,请按本人博客“mysql性能调优1”博文往Supan表中插入7000万数据。注意设置innodb_flush_log_at_trx_commit=2,否则插入7000万数据,大概需要耗费你4个小时左右。

实例一:演示索引的告诉查询

  首选不建立supan表的grade字段索引 进行grade字段的查询:

mysql> select * from supan where grade = 1515215; +--------+---------+---------+ | name   | id      | grade   | +--------+---------+---------+ | 寮犱笁   | 4535219 | 1515215 | +--------+---------+---------+ 1 row in set ([color=blue]9.17 [/color]sec)

耗时:9.17秒

创建grade字段上的索引:

mysql> create index index_supan_grade on supan(grade); Query OK, 0 rows affected (1 min 17.03 sec) Records: 0  Duplicates: 0  Warnings: 0

再次查询

mysql> select * from supan where grade = 1515215; +--------+---------+---------+ | name   | id      | grade   | +--------+---------+---------+ | 寮犱笁   | 4535219 | 1515215 | +--------+---------+---------+ 1 row in set (0.09 sec)

创建完索引后,用时仅为0.09秒 效率提升到 9.17 / 0.09 倍

二:索引字段上用表达式失效。

mysql> select * from supan where grade*10 = 256450; +--------+---------+-------+ | name   | id      | grade | +--------+---------+-------+ | 寮犱笁   | 1045649 | 25645 | | 寮犱笁   | 2045649 | 25645 | | 寮犱笁   | 3045649 | 25645 | +--------+---------+-------+ 3 rows in set (9.11 sec)

耗时9.11,又回到了远古时代,呵呵呵。上面的sql其实可以完全改为下面的高效率sql:

mysql> select * from supan where grade = 256450; +--------+---------+--------+ | name   | id      | grade  | +--------+---------+--------+ | 寮犱笁   | 1276454 | 256450 | | 寮犱笁   | 2276454 | 256450 | | 寮犱笁   | 3276454 | 256450 | +--------+---------+--------+ 3 rows in set (0.11 sec)

功能完全相同,但效率就是天上地下了,其中缘故你懂得。

三:mysql的索引字段上用聚凑函数,索引不失效。Oracle失效(值得注意)

mysql> select max(grade) from supan; +------------+ | max(grade) | +------------+ |    5792149 | +------------+ 1 row in set (0.00 sec)

四:索引对插入的影响

有索引的时候插入记录

mysql> insert into supan(name,grade) values('chenchaoyang',100); Query OK, 1 row affected (0.09 sec)

删除索引

mysql> drop index index_supan_grade on supan; Query OK, 0 rows affected (0.55 sec) Records: 0  Duplicates: 0  Warnings: 0

再次插入数据

mysql> insert into supan(name,grade) values('chenchaoyang',100); Query OK, 1 row affected (0.04 sec)

可以从两次插入的耗时分析,在索引的时候插入数据,效率比较低下,所以在经常需要插入,更新的表中,尽量少使用索引。

欢迎大家阅读《mysql性能调优3-目录相关_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql性能调优3-目录相关_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址