首页 > 数据库 >Mysql索引

Mysql索引

时间:2022-11-23 14:14:11浏览次数:42  
标签:like 数据 索引 Mysql table where 主键

innodb引擎索引数据结构:B+树,原型为N叉树,在innodb中N大约为1200,树高为4时,大约可以存1200的3次方的数据,约为17亿(树根的数据块一般在内存中,10亿数据的表上查一个数值,只需要查三次磁盘,且树的第二层大概率也在内存中,访问磁盘的数量又有减少)

主键索引:整行数据存在叶子节点中,所以又叫聚簇索引

非主键索引:叶子节点存放的是对应主键的id,又叫二级索引或普通索引,

    回表:基于该索引的查询,还要根据叶子节点中的主键id,再查询一次主键索引。

索引维护:B+ 树为了维护索引的有序性,在插入新值的时候需要做必要的维护。

    页分裂:插入已有索引的中间位置时,需要移动后面的数据,空出位置,若要插入的数据页满了,则需要做页分裂,申请一个新的数据页,然后挪动部分数据过去,该过程除了影响数据库性能外,还影响数据页的利用率,原本放一个数据页的数据现在放在两个不满的数据页。

    页合并:相邻的两个数据页删除了数据,利用率很低后,会将两个数据页做合并,相当于页分裂的逆过程。

    主键选取:

        自增主键:自增主键每次插入新的数据都是追加操作,不会挪动其他数据,也就不会触发页分裂。整形数字做主键只占4个字节,长整形则是8个字节。

        业务逻辑主键:往往无法保证有序插入,写入成本较高。且其做主键时,其他二级索引叶子节点大小要视该主键长度大小而定,越大占空间越多。

            适用场景:只有一个索引;该索引是唯一索引

覆盖索引:针对普通二级索引,如select “主键ID” from table where ...,要查询的内容已经包含在该索引上了,不需要执行回表的操作,本质上减少树搜索的次数,显著提升查询性能。

联合索引:对一张表上的多个列建立索引,表上多个列加起来组成一个索引,供快速查询使用。

    最左前缀原则:使用前提,联合索引最左边的列必须作为过滤条件,否则联合索引就不会生效。例如索引(a,b),select *** from table where a == (like)*** and b == (like)*** ,select *** from table where a == (like)*** 这样才能生效,而select *** from table where b == (like)***则不会生效。最左前缀的原则可以是联合索引的最左N个字符,也可以是最左的M个字段。且建立联合索引以后,不会再为a单独建立索引,提高索引的复用能力。

    索引下推:MySQL5.6版本之后引入下推优化,可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤调不满足条件的记录,减少回表的次数。

 

标签:like,数据,索引,Mysql,table,where,主键
From: https://www.cnblogs.com/hengw/p/16913135.html

相关文章

  • 通过Python实现MySQL和PG数据比对
    生产上,有个需要从MySQL异构复制数据到PG中的需求。数据同步组件用的是go-mysql-postgres(两位前同事基于社区开源的go-mysql-elasticsearch上做的PG功能补丁)。目前测试环境......
  • mysql破解root密码
    #设置免密登录echoskip-grant-tables>>/etc/my.cnfsystemctlrestartmysqld#设置密码为空mysql-e'usemysql;updateusersetauthentication_string=""where......
  • 搜索引擎的那些事(32位MD5算法)
      对于学过密码学的同学来说,md5算法肯定不会很陌生。但是,对于我来说,md5是一个新的命题。那什么是md5呢?md5就是对已有的数据进行加密处理。当然,它还有别的用处,什么呢?比如......
  • 搜索引擎的那些事(web遍历)
      写搜索引擎对我来说是一件有趣的事情,做的多好谈不上,但是至少可以一步一步做出来。当然做的怎么样,还得大家来判断了。在开始今天的话题之前,我们可以扯一些别的东西。......
  • 搜索引擎的那些事(中文分词)
      前面,我们在介绍搜索引擎的时候也谈到过中文分词。和英文不一样,中文上所有的汉字都是连在一起的,所以我们的一项工作就是把这些词语拆分成一个一个词组。因为只有这样才......
  • 搜索引擎的那些事(多线程web遍历)
       上面一篇博客当中,我们可以利用单一的线程完成网页的下载。今天,我们打算在此基础上完成多线程的访问和加载操作。使用多线程,倒不是因为这项技术有多牛,主要是因为我们......
  • 搜索引擎的那些事(title信息提取)
        前面我们在谈到搜索引擎的时候,说到了网页下载、说到了分词、说到了多线程。但是,我们要清楚这一切的目的都是为了在网页中获得重要的信息。如何从网页或者从链接中......
  • 安装mysql服务添加到systemctl服务当中
    1、https://www.cnblogs.com/dahuo/p/16014689.html把mysqld添加至systemctl进行管理 #复制过去后,会sytemctl会自动识别的 cp/usr/local/mysql/support-f......
  • 二位数组、对象数组对应索引的值相加
    二位数组、对象数组对应索引的值相加,如下列arr1、arr2、arr3索引0的数据相加1+11+10=22letarr1=[1,2,3,4,5,6];letarr2=[11,12,13,14,15,16];letarr3......
  • mysql 报错 1292 - Truncated incorrect DECIMAL value
    数据库维护之时,报错1292sql如下update表1leftjoin表2on表1.关联字段=表2.关联字段set表1.更新字段=表2.字段where表2.字段!=''and表2.字段!='#VALU......