广告
返回顶部
首页 > 资讯 > 数据库 >Mysql调优-3Mysql的索引
  • 560
分享到

Mysql调优-3Mysql的索引

Mysql调优-3Mysql的索引数据库入门数据库基础教程 2019-06-26 07:06:16 560人浏览 绘本
摘要

Memory用的是hash index,但是InnoDB和MyISAM用的是B+树,不用二叉树的原因就是深度可能过深,深度过深影响查询和io性能; 索引使用树的过程: BST:二分查找,不平衡AVL:二叉平衡树,最长子树和最短子树的高度之差

Mysql调优-3Mysql的索引[数据库教程]

Memory用的是hash index,但是InnoDB和MyISAM用的是B+树,不用二叉树的原因就是深度可能过深,深度过深影响查询和io性能;

索引使用树的过程:

BST:二分查找,不平衡
AVL:二叉平衡树,最长子树和最短子树的高度之差不能超过1,数据越多,旋转越多,插入删除效率极低,查询效率比较高,而且树的深度也会比较深
红黑树:最长子树不超过最短子树的两倍即可,通过旋转+变色两步操作,损失了部分查询性能来满足插入性能的提升,但是也存在节点过深,因为只有两个分支;
https://www.cs.usfca.edu/~galles/visualization/AlGorithms.html

InnoDB数据和索引放在 一起 ,MyIsam是分开存放的,所以数据节点的查找方式不一样:

  InnoDB:对应叶子节点存储的实际就是一整行的数据,只要遍历到叶子节点就可以取出来整个文件,

       但是MyIsam放的是实际文件的地址,通过地址才能找到实际的数据.

  索引树一般是3层,Mysql的查询是非常快的,但是并发请求和IO会影响查询的性能;

  不指定主键最好指定唯一键,唯一键没有会有对用户不可见的row_id;

索引的基本知识:

优点:

  1>大大减少了服务器需要扫描的数据量;

  2>帮助服务器避免排序和临时表->尽量用索引排序

用处:

  1>快速查找匹配where子句的行

  2>从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引

  3>如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行

  4>当有表连接的时候,从其他表检索行数据

  5>查找特定索引列的min或max值

  6>如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组;

  7>在某些情况下,可以优化查询以检索值而无需查询数据行

索引的分类:

  数据库会默认建索引,但是给唯一

  1>主键索引:唯一且非空索引

  2>唯一索引

  3>普通索引

  4>全文索引

  5>组合索引(例如两个name+age组合创建的索引,一般面试会涉及到的技术名词:)

5.1>回表:建索引的时候InnoDB默认情况会为主键创建索引,但是更多情况给普通列创建索引,普通列的索引叶子节点存储的不是整行数据,
     那么先查询name的B+索引,然后找到主键的B+索引,拿着主键的B+索引回表查询完整记录;
5.2>覆盖索引:遍历两次B+树,IO次数比较多,回表过程没有了,就是覆盖索引,例如主键idB+树,不需要再select 主键 from ....
举例: select * from emp where name = ‘Tom‘;name做索引的时候它的B+树的叶子节点存储的是主键id,
   如果更改为sql语句select id from emp where name=‘Tom‘,此时就不需要再回表查询了,因为上次叶子节点已经查出关于id的信息
5.3>最左匹配:(1)select * from emp where name = ? and age = ?;
(2)select * from emp where age = ?;此时并没有用到(name,age)的组合索引,必须先有左边索引;解决方案换成(age,name)索引或者添加age索引
5.4>索引下推:
(3)select * from emp where name=? 以上(1)(2)(3)3条如何创建组合索引?
方案:A (name,age) ,age 索引
B (age,name),name索引
索引是需要持久化存储的,所以考虑到age比name的存储较小,使用A解决方案
=>页分裂和页合并的过程
select t1.name,t2.name from t1 join t2 on t1.id=t2.id;(t1 10个列,t2 20个列,最后关联是20个列,或者先取出t1的name和t2的name,
再关联,后者执行效率较高因为范围缩小了)
索引比较好的文章:Http://blog.codinglabs.org/articles/theory-of-mysql-index.html

   https://www.yuque.com/yinjianwei/vyrvkf/ri4ks7



Mysql调优-3Mysql的索引

原文:https://www.cnblogs.com/healthinfo/p/13261691.html

您可能感兴趣的文档:

--结束END--

本文标题: Mysql调优-3Mysql的索引

本文链接: https://www.lsjlt.com/news/7048.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql调优-3Mysql的索引
    Memory用的是hash index,但是InnoDB和MyISAM用的是B+树,不用二叉树的原因就是深度可能过深,深度过深影响查询和IO性能; 索引使用树的过程: BST:二分查找,不平衡AVL:二叉平衡树,最长子树和最短子树的高度之差...
    99+
    2019-06-26
    Mysql调优-3Mysql的索引 数据库入门 数据库基础教程
  • 【Mysql】快速定位不合理的索引——MySQL索引调优(一)
    原文地址:http://mp.weixin.qq.com/s__biz=MjM5MjIxNDA4NA==&mid=401131835&idx=1&sn=37c5fd9d3d8670f...
    99+
    2022-10-18
  • Mysql高可用|索引|事务 | 调优
    前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 文章目录 前言sql语句的执行顺序关键词连接名字解释sql语句 面试坑点存储引擎MYSQL存储引擎 SQL优化索引索引失效索引的数据结构面试坑...
    99+
    2023-12-22
    mysql oracle 数据库
  • MySQL索引优化
    一、单表 创建索引之前:type=ALL全表扫描,Extra里面的Using filesort(文件内部排序) 根据where后面的条件创建:CREATE INDEX idx_article_ccv ON articl...
    99+
    2019-01-06
    MySQL索引优化
  • mysql织梦索引优化之MySQL Order By索引优化
    在一些情况下,MySQL可以直接使用索引来满足一个ORDER BY 或GROUP BY 子句而无需做额外的排序。尽管ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDER B...
    99+
    2022-10-20
  • MySQL优化(3):索引
    MySQL优化中,最重要的优化手段就是索引,也是最常用的优化手段   索引简介: 索引:关键字与数据位置之间的映射关系 关键字:从数据中提取,用于标识,检索数据的特定内容 目的:加快检索   索引检索为什么快: (1)关键字相对于...
    99+
    2014-05-17
    MySQL优化(3):索引
  • MySQL优化之索引
    SQL为什么需要优化? 对于初学者来说,能够写出实现功能的SQL语句而不出错,查询出所需要的结果,就已经能够满足日常使用了。但在某些场景,对性能的要求比较高,因此,要求SQL的执行响应速度快,就需要对SQL进行一定程度的优化。 在...
    99+
    2021-02-14
    MySQL优化之索引
  • MySQL索引优化EXPLAIN
    日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: MySQL整体逻辑架构图可以分为Server和存储引擎层。...
    99+
    2015-10-24
    MySQL索引优化EXPLAIN
  • MySQL 5.7 索引优化
    提升查询性能最好的方法就是创建索引。索引项就像指向表中行的指针,让查询通过WHERE条件快速找到所要查询的行。MySQL所有的数据类型都可以创建索引。 不必要的索引会消耗系统的空间和MySQL在判断...
    99+
    2022-10-18
  • centos7-mysql-索引优化
    索引优化,优化查询速度-------------------------------------------------------count,统计一个表总计行数myisam储存引擎有自带计数器,使用cou...
    99+
    2022-10-18
  • mysql优化和索引
    表的优化1.定长与变长分离    如 int,char(4),time核心且常用字段,建成定长,放在一张表;    而varchar,text,blob这种...
    99+
    2022-10-18
  • 如何评估和调优PHP与MySQL索引的效果?
    引言:在开发和维护PHP和MySQL的应用程序时,优化数据库查询性能是至关重要的一步。索引是提高查询效率的常用手段之一,因此评估和调优PHP与MySQL索引的效果是必不可少的。在本文中,我们将介绍如何评估和调优PHP与MySQL索引的效果,...
    99+
    2023-10-21
    MySQL 调优 评估 PHP 索引
  • MySQL 覆盖索引的优点
    一个通常的建议是为WHERE条件创建索引,但这其实是片面的。索引应当为全部查询设计,而不仅仅是WHERE条件。索引确实能有效地查找数据行,但MySQL也能够使用索引获取列数据,这样根本不需要去读取一行...
    99+
    2022-05-30
    MySQL 覆盖索引 MySQL 覆盖索引优点
  • MySQL索引优化深入
    创建 test 测试表 CREATE TABLE `test` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `c1` varchar(10) DEFAULT NULL,  `c2`...
    99+
    2016-11-27
    MySQL索引优化深入
  • MySQL索引优化分享
    2,explain的作⽤ 查看表的读取顺序,读取操作类型,有哪些索引可用,表之间关联,每张表中有哪些索引被优化器执⾏ 3,索引命中策略略分析     最左匹配原则 在索引字段上加入函数(不匹配索引)     is null/is not n...
    99+
    2016-09-28
    MySQL索引优化分享
  • MySQL如何优化索引
    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。表越大,花费越多。如果表中有相关列的索引,MySQL可以快速确定要在...
    99+
    2022-05-27
    MySQL 索引 MySQL 优化索引
  • MySQL 索引优化案例
    目录数据准备联合索引的首字段用范围查询强制走索引覆盖索引优化in和or什么时候会走索引like xx% 一般都会走索引,和数据量无关索引下推为什么范围查找没有用索引下推优化?如何选择索引Trace 工具深入优化order...
    99+
    2022-08-19
    MySQL索引优化 MySQL索引
  • MySQL--索引优化原则
    索引优化原则 1、最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3...
    99+
    2022-10-18
  • Mysql索引如何优化
    小编给大家分享一下Mysql索引如何优化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!编程沉思录     &...
    99+
    2022-10-18
  • 浅谈MySQL的B树索引与索引优化小结
    MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引结构,理解常见的...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作