`

理解mysql_索引的原理及优化技巧

 
阅读更多
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索引原理及慢查询优化1

    MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的互联网环境中,优化查询性能对于系统的整体效能至关重要。MySQL作为广泛使用的开源关系型数据库,其索引机制和查询优化技巧是开发者...

    MySQL调优讨论:原理 优化 技巧

    MySQL数据库是世界上最受欢迎的开源关系型数据库之一,其性能优化对于任何依赖它的应用程序都是至关重要的。本篇文章将深入探讨...理解调优原理,掌握优化策略,运用实用技巧,才能使MySQL数据库达到最佳运行状态。

    MySQL索引优化课件

    本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,我们要理解什么是索引。索引就像书的目录,它为数据库中的数据提供快速访问的途径。在MySQL中,常见的索引类型有B-Tree...

    MySQL索引原理及慢查询优化

    总的来说,优化MySQL的慢查询需要结合索引原理、查询优化技巧、数据库设计和运维实践。通过对业务需求的理解,我们可以制定合适的索引策略,改进SQL语句,从而提升数据库的整体性能,满足高并发、大数据量的业务需求...

    MYSQL索引和优化详细说明教程

    MySQL索引和优化是数据库管理中...总之,理解和掌握MySQL的索引原理和优化策略对于提升数据库性能至关重要。合理地创建和使用索引,可以显著提高查询速度,降低系统负载,从而为应用程序提供更好的响应时间和用户体验。

    mySQL.zip_MYSQL_mysql 课件_学习笔记_笔记_资料

    4. **性能优化**:分享一些数据库性能优化技巧,如查询优化、索引优化和内存参数调整。 5. **安全实践**:介绍最佳的安全实践,如定期更改密码,限制远程访问,以及设置严格的权限策略。 通过深入学习这份资料,...

    MySQL原理和优化实战

    通过本课程的学习,学员将能够深刻理解MySQL的内部运作机制,并掌握一系列实用的优化技巧。这些技能不仅能够帮助开发者构建高性能的应用程序,还能提高数据库的整体稳定性和可扩展性。无论是在日常开发还是系统维护...

    MySQL DBA求职技巧_MYSQL_

    3. **性能优化**:掌握索引原理、查询优化技巧,了解如何通过EXPLAIN分析SQL执行计划,以及如何使用慢查询日志来定位性能问题。 4. **备份与恢复**:理解全量备份、增量备份和binlog的应用,知道如何制定备份策略和...

    Beginning_MySQL_Database_Design__Optimization

    通过这本书的学习,读者不仅可以掌握MySQL数据库的基本设计原理和优化技巧,还能了解如何在实际开发中有效地运用这些知识,提升系统的整体性能。对于从事C#、Ajax、C++、Struts或J2EE开发的人员来说,这是一份非常有...

    MySQL.rar_MYSQL_Mysql入门

    通过本教程的学习,你可以系统地掌握MySQL的基础知识,理解SQL语言,熟悉数据库设计原则,掌握数据管理与安全性,以及性能优化技巧。无论是个人项目还是团队协作,这些知识都将使你在MySQL的世界里游刃有余。

    Mysql底层原理与优化技巧

    了解其底层原理并掌握优化技巧对于提升系统性能至关重要。本篇将深入探讨MySQL的几个关键方面,包括存储引擎、索引机制、查询优化以及性能监控。 首先,MySQL的存储引擎是其核心组成部分,常见的有InnoDB和MyISAM。...

    mysql.rar_MYSQL_分页

    综上,MySQL的分页查询不仅涉及到基础的LIMIT和OFFSET用法,还涵盖了许多优化技巧,包括窗口函数、自连接、子查询以及索引优化等。理解和熟练应用这些方法,对于提升数据库性能和用户体验至关重要。

    MySQL数据库原理及应用(第2版)(微课版)-教学用数据库(Mysql数据库备份文件).zip

    MySQL数据库是世界上最受欢迎的开源关系型数据库管理系统之一,其设计理念在于提供快速、可靠的数据存储解决方案。...无论是初学者还是经验丰富的开发者,都能从中受益,深入理解MySQL数据库的原理和应用。

    MySql_BOOKV1.rar_MYSQL

    1. 索引原理:讲解B-Tree、Hash、R-Tree等不同类型的索引,以及如何创建和管理索引,优化查询性能。 2. 查询优化:分析EXPLAIN命令的使用,理解执行计划,识别并解决性能瓶颈。 五、备份与恢复 1. 数据备份:学习...

    MySQL_源码分析

    在深入探讨《MySQL源码分析》这一主题之前,我们首先需要理解MySQL作为一款全球广泛使用的开源关系型数据库管理系统,其内部架构与运作机制的复杂性和深度。MySQL的源码分析,不仅对于理解数据库的设计原理至关重要...

    High Performance MySQL (2004).zip_MYSQL_high

    理解这些组件的工作原理对于优化数据库性能至关重要。 2. **存储引擎**:InnoDB和MyISAM是MySQL的两个主要存储引擎。InnoDB支持事务处理和行级锁定,适合复杂的事务应用;而MyISAM则以读写速度快著称,适用于读多写...

    MySQL只学有用的–MYSQL索引原理及创建技巧

    总之,掌握MySQL索引原理与创建技巧对于数据库管理员和开发人员来说至关重要,它可以极大地提升数据库查询效率,优化系统的整体性能。在实际工作中,根据业务需求和查询模式选择合适的索引类型,并合理设计索引策略...

    mysql_internal.pdf

    - **《Understanding the Linux Kernel》**:虽然不是直接关于MySQL,但深入理解Linux内核有助于更好地管理和优化运行在Linux上的MySQL实例。 以上知识点涵盖了MySQL内部原理的主要方面,通过学习这些内容,无论是...

    MYSQL查询、优化原理

    除了以上提到的基本原理之外,还有一些常见的 MySQL 性能优化技巧: - **使用合适的索引**: 选择合适的索引类型和覆盖索引可以显著提高查询速度。 - **合理设置 join_buffer_size**: 适当增大 join_buffer_size ...

Global site tag (gtag.js) - Google Analytics