问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql索引有哪些

发布网友 发布时间:2022-04-21 03:41

我来回答

2个回答

热心网友 时间:2022-04-07 19:23

如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
那么,这几种索引有什么功能和性能上的不同呢?
FULLTEXT
即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE INDEX创建FULLTEXT索引,要比先为一张表建立FULLTEXT然后再将数据写入的速度快很多。
全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。在没有全文索引之前,这样一个查询语句是要进行遍历数据表操作的,可见,在数据量较大时是极其的耗时的,如果没有异步IO处理,进程将被挟持,很浪费时间,当然这里不对异步IO作进一步讲解,想了解的童鞋,自行谷哥。

热心网友 时间:2022-04-07 20:41

在满足语句需求的情况下,尽量少的访问资源是数据库设计的重要原则,这和执行的 SQL 有直接的关系,索引问题又是 SQL 问题中出现频率最高的,常见的索引问题包括:无索引(失效)、隐式转换。
1. SQL 执行流程看一个问题,在下面这个表 T 中,如果我要执行 select * from T where k between 3 and 5; 需要执行几次树的搜索操作,会扫描多少行?mysql> create table T (    -> ID int primary key,    -> k int NOT NULL DEFAULT 0,    -> s varchar(16) NOT NULL DEFAULT '',    -> index k(k))    -> engine=InnoDB;mysql> insert into T values(100,1, 'aa'),(200,2,'bb'),\      (300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');
这分别是 ID 字段索引树、k 字段索引树。 

这条 SQL 语句的执行流程:

1. 在 k 索引树上找到 k=3,获得 ID=3002. 回表到 ID 索引树查找 ID=300 的记录,对应 R33. 在 k 索引树找到下一个值 k=5,ID=5004. 再回到 ID 索引树找到对应 ID=500 的 R4

5. 在 k 索引树去下一个值 k=6,不符合条件,循环结束

这个过程读取了 k 索引树的三条记录,回表了两次。因为查询结果所需要的数据只在主键索引上有,所以必须得回表。所以,我们该如何通过优化索引,来避免回表呢?
2. 常见索引优化2.1 覆盖索引覆盖索引,换言之就是索引要覆盖我们的查询请求,无需回表。

如果执行的语句是 select ID from T wherek between 3 and 5;,这样的话因为 ID 的值在 k 索引树上,就不需要回表了。

覆盖索引可以减少树的搜索次数,显著提升查询性能,是常用的性能优化手段。

但是,维护索引是有代价的,所以在建立冗余索引来支持覆盖索引时要权衡利弊。

2.2 最左前缀原则

B+ 树的数据项是复合的数据结构,比如 (name,sex,age) 的时候,B+ 树是按照从左到右的顺序来建立搜索树的,当 (张三,F,26) 这样的数据来检索的时候,B+ 树会优先比较 name 来确定下一步的检索方向,如果 name 相同再依次比较 sex 和 age,最后得到检索的数据。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
驾照扣分什么时候清零?扣分会如何处理?会累积到下个周期吗? 爆笑职场喜剧《破事精英》正在热播,你怎么看待年轻人熬夜加班的... ...但是朋友们都说没有2月30 我很无语我现在都不知道我生日了... 阳历1986.3.27生日,202 3年阴历生日是多少? 关于适合爬山发的朋友圈句子 登山看风景的心情说说 爬山开心简单心情说说 求教:什么是房地产的杠杆 房价杠杆率什么意思 楼市杠杆率怎么通俗理解 iPhone如何关闭共享相簿广告提醒_苹果手机总是收到共享相簿广告关闭方 ... mysql数据库优化讲解之索引:什么是索引 mysql索引? mysql有哪些索引 解释mysql中什么是索引?它的作用是什么? mysql 索引有几种 MYSQL的索引主要作用是什么! mysql的索引用的什么数据结构 mysql 索引原理 mysql 索引失效的原因有哪些 mysql索引最左原则原理 mysql创建索引的原则 mysql索引原理 中国工商银行广东分行广州经济技术开发区东区支行的行号是多少? 中国工商银行(花地大道支行)的行号行号是多少? 工商银行开户行12位行号如何查询 中国工商银行跨行行号怎么查询? 中国工商银行 行号多少 中国工商银行联行号是多少 工商银行开户行行号怎么查询系统 工商银行怎么查询开户行行号 mysql有几种索引类型?使用索引时都有那些地方要注... mysql的索引求解 oppo手机首选网络怎么设置怎么改为4g网络 京东金条借款有风险吗? 京东金条借钱审批多久 京东金条可以借款到哪些银行卡,支持信用卡吗? 猜成语很多*说话 京东金条借2万多少利息 京东金条晚上可以借款吗 在京东金条应当怎样借钱呢? 京东金条借款多久放款 请问如何用京东金条借钱呢? 京东金条贷款是正规的吗? OPPOR11手机信息里面的设置首选网络类型改了,网络好差,要改成哪一个 百度网盘提示违规的视频怎么下载? 关于2020年的作文怎么写? 盘点6部安徽卫视播过,如今被翻拍的泰剧,你看过哪部? 百度云含违规内容不能下载的文件怎么办 中国樱花季是什么时候 2020国内有哪些有樱花的地方 百度网盘违规怎么下载