注:原创作品,转载请注明出处。
众所周知,索引可以加快查询的速度,但有的时候你的一个小不注意索引就失效。 本博文结合实例追根究底研究索引。
前置条件:
为表达效果,请按本人博客“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索引优化与底层数据结构深入剖析
什么是数据库?什么是关系数据库管理系统(RDBMS)? 什么是SQL?列举一些常见的SQL命令。...什么是数据库性能监控和调优工具?列举一些常用的工具。 什么是数据库连接字符串?它的格式和参数有哪些
第6章 影晌MySQL Server性能的相关因素 6.0 引言 6.1 商业需求对性能的影响 6.2 系统架构及实现对性能的影响 6.3 Query语句对系统性能的影响 6.4 Schema设计对系统的性能影响 6.5 硬件环境对...
mysql性能调优思路定位慢sql语句启动慢查询,mysqldumpslow分析分析慢sql语句explain执行计划分析语句优化创建最合理的索引避免模糊查询=
4.5、mysql用的是b+树,所有数据都在叶子节点,索引会比较小,常用查询字段建立索引,所有查询尽量在索引中完成 4.6、唯一性太差的字段,不适合建立索引(如状态字段、类型字段),当一条Query返回的数据超过了全表的15%时...
Mysql配置优化参数说明及优化指南,Mysql性能查看常用命令详解,Mysql索引实现原理分析,Mysql状态参数详解
《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...
以MySQL数据库的基础及维护为切入点,重点介绍了MySQL数据库应用系统的性能调优,以及高可用可扩展的架构设计。 ●基础篇介绍了MySQL软件的基础知识、架构组成、存储引擎、安全管理及基本的备份恢复知识 ●性能优化...
之前介绍了相关mysql的性能调优,针对innodb存储引擎的使用进行性能调优的方法,Jason也留下点Memory。首先当然要提到的是innodb的关键特性:插入缓冲,两次写。 之前介绍了相关mysql的性能调优,针对innodb存储...
MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是会选择 MYSQL 来做数据存储。 MYSQL 如此方便和...
开篇词讲怎样才能做好性能调优02讲如何制定性能调优策略04讲慎重使用正则表达式05讲ArrayList还是LinkedList使用不当性能差千倍07讲深入浅出HashMap的设计与优化08讲网络通信优化之IO模型:如何解决高并发下IO瓶颈09...
【主要内容】B+树介绍、单表性能调优、多表性能调优以及SQL语句效率对比。 【应用场景】1、B+树作为MySQL索引底层实现的数据结构,需要我们了解其工作机制; 2、从创建表要注意的点以及SQL语句编写的注意点来优化...
MySQL企业级性能调优实战,针对MySQL数据库及存储引擎进行拆解,包括了InnoDB存储引擎,MyISAM存储引擎,Memory存储引擎,CSV存储引擎,B+ Tree索引原理等内容。
本文将详细介绍MySQL调优的具体步骤和案例分析,包括发现问题、分析原因、优化方案和示例代码等内容,帮助程序员解决MySQL性能问题。MySQL调优是提高系统性能和响应速度的关键步骤。通过发现问题、分析原因、优化...
mysql索引原理 索引优化 多表优化 Explain分析 表锁的介绍 失效可以私信我
的第二版着眼于健壮性、安全性及数据完整性,涵盖了 MySQL性能的细微之处。 《高性能MYSQL》指导你深入MYSQL的高级技术,充分利用MySQL的全部强大能力。你将学到如何设计 MySQL的表、索引、查询以及可以将性能发挥...
MySQL SQL 优化 性能调优 ,详细介绍了优化MySQL性能的方法,包括索引的深度解析
MySQL SQL 优化 性能调优 ,详细介绍了优化MySQL性能的方法,包括索引的深度解析