innodb的索引:
● innodb采用索引组织数据的形式,它是在存储引擎层面实现的,与后端的服务器层没有关联。不同的存储引擎有不同的实现算法。
● 索引的原理
索引采用b tree(平衡树)树的形式保存,所以是有顺序的。
索引的数据存储在表空间(tablespace)里面,
聚集索引(主键索引)上面存储了整个行的数据,而辅助索引上面仅存了指向主键的指针,因此辅助索引查询效率要低于主键索引1倍。
在插入和删除的时候性能比较低,需要维护平衡树。
● 索引的分类:
1. 聚集索引(主键索引), 一个表只允许一个主键索引,以b+树结构存储, 索引上面已经存储了数据。查询的时间复杂度为树的高度
2. 辅助索引, 存储了主键的指向,查询时需要先找到辅助索引,然后根据辅助索引的值找到主键索引,然后再获取数据
3. 联合索引, 最左原则
因为右边的索引在建索引的时候没有顺序,所以会全表扫描。
mysql目前还做不到松散索引扫描
4. 倒排索引, 将text分词得出很多小片段的词组,对这些词组进行索引
5. 自适应hash索引。
6. 覆盖索引
select 中的字段在索引里面,不需要到再一次到聚集索引中去获取值
用explain查询,可以看到extra标注:using index
● 优化点
1. 索引是字符串,但是查询时没有带单引号 ' '
2. 一条sql只能走一个索引, 如果走多个索引建议用联合索引
3. 优化过程中优先考虑使用到聚集索引和覆盖索引,这能很大程度上提高效率
4. 建议少用in,尤其是嵌套子查询,因为那样的话外部表会做全表扫描,可以用表关联
exists 和 in 能够很好的去除,不需要distinct、group,避免了临时表的创建,效率有时会比较高
是不是一定要禁止使用子查询(如exists、in), 这要看场景,因为用inner join 容易 出现重复记录,剔重需要用distcint,会影响到效率。
什么情况下会产生临时表?
5. min\max巧用主键索引
6. 巧用子查询更新表记录
update t inner join (select id, count(1) count from t2 group by id) t3 set t.max_value = t3.count
索引类型越小越好,对于大数据处理来说,这个可不是小事,从字符串替换为数字类型,可以极大地节省内存、磁盘存储以及网络带宽,减少IO的代价,而且很多数据结构和算法使用数字类型比字符串要更快
分享到:
相关推荐
MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...
MySQL数据库是世界上最受欢迎的开源关系型数据库之一,其性能优化对于任何依赖它的应用程序都是至关重要的。本篇文章将深入探讨...理解调优原理,掌握优化策略,运用实用技巧,才能使MySQL数据库达到最佳运行状态。
本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,我们要理解什么是索引。索引就像书的目录,它为数据库中的数据提供快速访问的途径。在MySQL中,常见的索引类型有B-Tree...
总的来说,优化MySQL的慢查询需要结合索引原理、查询优化技巧、数据库设计和运维实践。通过对业务需求的理解,我们可以制定合适的索引策略,改进SQL语句,从而提升数据库的整体性能,满足高并发、大数据量的业务需求...
MySQL索引和优化是数据库管理中...总之,理解和掌握MySQL的索引原理和优化策略对于提升数据库性能至关重要。合理地创建和使用索引,可以显著提高查询速度,降低系统负载,从而为应用程序提供更好的响应时间和用户体验。
4. **性能优化**:分享一些数据库性能优化技巧,如查询优化、索引优化和内存参数调整。 5. **安全实践**:介绍最佳的安全实践,如定期更改密码,限制远程访问,以及设置严格的权限策略。 通过深入学习这份资料,...
通过本课程的学习,学员将能够深刻理解MySQL的内部运作机制,并掌握一系列实用的优化技巧。这些技能不仅能够帮助开发者构建高性能的应用程序,还能提高数据库的整体稳定性和可扩展性。无论是在日常开发还是系统维护...
3. **性能优化**:掌握索引原理、查询优化技巧,了解如何通过EXPLAIN分析SQL执行计划,以及如何使用慢查询日志来定位性能问题。 4. **备份与恢复**:理解全量备份、增量备份和binlog的应用,知道如何制定备份策略和...
通过这本书的学习,读者不仅可以掌握MySQL数据库的基本设计原理和优化技巧,还能了解如何在实际开发中有效地运用这些知识,提升系统的整体性能。对于从事C#、Ajax、C++、Struts或J2EE开发的人员来说,这是一份非常有...
通过本教程的学习,你可以系统地掌握MySQL的基础知识,理解SQL语言,熟悉数据库设计原则,掌握数据管理与安全性,以及性能优化技巧。无论是个人项目还是团队协作,这些知识都将使你在MySQL的世界里游刃有余。
了解其底层原理并掌握优化技巧对于提升系统性能至关重要。本篇将深入探讨MySQL的几个关键方面,包括存储引擎、索引机制、查询优化以及性能监控。 首先,MySQL的存储引擎是其核心组成部分,常见的有InnoDB和MyISAM。...
综上,MySQL的分页查询不仅涉及到基础的LIMIT和OFFSET用法,还涵盖了许多优化技巧,包括窗口函数、自连接、子查询以及索引优化等。理解和熟练应用这些方法,对于提升数据库性能和用户体验至关重要。
MySQL数据库是世界上最受欢迎的开源关系型数据库管理系统之一,其设计理念在于提供快速、可靠的数据存储解决方案。...无论是初学者还是经验丰富的开发者,都能从中受益,深入理解MySQL数据库的原理和应用。
1. 索引原理:讲解B-Tree、Hash、R-Tree等不同类型的索引,以及如何创建和管理索引,优化查询性能。 2. 查询优化:分析EXPLAIN命令的使用,理解执行计划,识别并解决性能瓶颈。 五、备份与恢复 1. 数据备份:学习...
在深入探讨《MySQL源码分析》这一主题之前,我们首先需要理解MySQL作为一款全球广泛使用的开源关系型数据库管理系统,其内部架构与运作机制的复杂性和深度。MySQL的源码分析,不仅对于理解数据库的设计原理至关重要...
理解这些组件的工作原理对于优化数据库性能至关重要。 2. **存储引擎**:InnoDB和MyISAM是MySQL的两个主要存储引擎。InnoDB支持事务处理和行级锁定,适合复杂的事务应用;而MyISAM则以读写速度快著称,适用于读多写...
总之,掌握MySQL索引原理与创建技巧对于数据库管理员和开发人员来说至关重要,它可以极大地提升数据库查询效率,优化系统的整体性能。在实际工作中,根据业务需求和查询模式选择合适的索引类型,并合理设计索引策略...
- **《Understanding the Linux Kernel》**:虽然不是直接关于MySQL,但深入理解Linux内核有助于更好地管理和优化运行在Linux上的MySQL实例。 以上知识点涵盖了MySQL内部原理的主要方面,通过学习这些内容,无论是...
除了以上提到的基本原理之外,还有一些常见的 MySQL 性能优化技巧: - **使用合适的索引**: 选择合适的索引类型和覆盖索引可以显著提高查询速度。 - **合理设置 join_buffer_size**: 适当增大 join_buffer_size ...