注:原创作品,转载请注明出处。
众所周知,索引可以加快查询的速度,但有的时候你的一个小不注意索引就失效。 本博文结合实例追根究底研究索引。
前置条件:
为表达效果,请按本人博客“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索引优化与底层数据结构深入剖析
MySQL是世界上最受欢迎的...本全册将详细讲解以上知识点,并通过实例演示如何在实际应用中实施这些策略,帮助读者成为MySQL性能调优与架构设计的专家。无论你是初学者还是有经验的DBA,都能从中获得宝贵的知识和经验。
《数据库性能调优--原理与技术》是一本深入探讨数据库性能优化的专业书籍,旨在帮助读者理解和掌握提升数据库系统效率的关键技术和方法。通过学习本书,读者能够有效地解决在实际工作中遇到的数据库性能问题,提高...
### MySQL性能调优与架构设计的关键知识点 #### 一、MySQL概述 - **MySQL Server简介** - **定义**: MySQL是由MySQL AB公司(现已被Oracle收购)开发的一款开放源代码的关系型数据库管理系统(RDBMS)。 - **特点*...
《数据库性能调优——原理与技术》这本书全面系统地介绍了数据库性能调优的相关知识和技术。通过学习本书,读者不仅能够了解到调优的基本原理,还能掌握一系列实用的调优技巧和方法。无论是对于正在学习数据库的学生...
在《MySQL性能调优与架构设计》一书中,附录部分提供了一个名为“example”的数据库创建脚本。这个脚本是用于演示和学习如何构建一个简单的数据库结构,它包含了几个核心表,如event、group_message、group_message_...
首先,MySQL性能调优涉及到诸多方面,包括SQL查询优化、索引策略、存储引擎的选择以及内存参数的调整。在SQL查询优化中,作者可能详细介绍了如何避免全表扫描,利用EXPLAIN分析查询执行计划,以及如何编写高效的JOIN...
【MySQL面试题】在面试MySQL相关的职位时,面试官可能会问到一系列关于数据库基础、SQL语法、事务处理、索引优化以及性能调优的问题。以下是一些可能的面试重点: 1. **数据库基本概念**: - 数据库是用于存储和...
以上这些只是数据库性能调优的部分内容,实际操作中还需要结合具体的数据库管理系统(如MySQL、Oracle、SQL Server等)和业务需求来进行细致的调整。通过对这些原理和技术的深入理解和应用,可以有效地提升数据库...
### MySQL性能调优与架构设计的关键知识点 #### 一、MySQL概述 - **定义与特点**:MySQL是一款由MySQL AB公司开发(后被Sun Microsystems收购)的开源数据库管理系统,以其简单高效、可靠性强等特点著称。它是一款...
综上所述,MySQL性能调优与架构设计涉及的方面广泛且深入,涵盖SQL优化、索引策略、架构设计、存储引擎选择、内存配置、并发控制等多个层面。通过学习和实践,可以有效地提升MySQL数据库在大数据量环境下的处理能力...
本篇将围绕“MySQL高性能—数据库的性能调优”这一主题,深入探讨如何优化MySQL的性能,提升系统整体效率。 首先,性能优化主要涉及以下几个方面: 1. **查询优化**:高效的SQL查询是性能提升的关键。这包括避免全...
- 在进行MySQL性能调优时,首先要从SQL语句入手,通过合理的索引设计、避免全表扫描、使用覆盖索引等方法来提高查询效率。 - **2.2.2 参数配置调整** - MySQL的运行参数对性能有着直接影响,例如设置合适的缓冲池...
综上所述,MySQL性能调优与架构设计涉及了数据库的多个层面,包括查询优化、索引管理、存储引擎选择、资源调度、高可用架构设计、监控与告警、备份恢复和安全策略。这些知识的掌握和应用对于任何使用MySQL的企业都至...
《MySQL性能调优与架构设计》是简朝阳先生的一部深度解析MySQL数据库性能优化与架构构建的专业著作。这本书深入探讨了MySQL在实际应用中的各种性能问题,并提供了有效的解决策略,同时对MySQL的架构设计进行了全面的...
MySQL性能调优参数 MySQL 是一个广泛使用的开源关系型数据库管理系统,在实际应用中,如何提高 MySQL 的性能是一个关键的问题。本文将总结 MySQL 性能调优参数,涵盖 Innodb 相关参数、连接参数、缓存参数、日志...
### MySQL性能调优与架构设计知识点概述 #### 一、MySQL基本介绍 ##### 1.1 MySQL Server简介 - **1.1.1 什么是MySQL** - MySQL是一款由MySQL AB公司开发的开源数据库管理系统,后来被Sun Microsystems收购。它是...