您好,登录后才能下订单哦!
请求超时!
请点击 重新获取二维码这篇“sql索引使用规则是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sql索引使用规则是什么”文章吧。
索引(index)是帮助 MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高级查找算法,这种数据结构就是索引。
MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:如下图所示:
上述是MySQL中所支持的所有的索引结构,不同的存储引擎对于索引结构的支持情况如下图所示。平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。
在 MySQL 5.5 之后, InnoDB是默认的 MySQL 存储引擎,InnoDB引擎的默认索引是B+tree。 MySQL 索引数据结构对经典的 B+Tree 进行了优化。在原 B+Tree的基础上,增加一个指向相邻叶子节点 的链表指针,就形成了带有顺序指针的B+Tree,如下图所示。这提高区间访问的性能,利于排序。并且InnoDB 中具有自适应 hash 功能, hash 索引是 InnoDB存储引擎根据 B+Tree 索引在指定条件下自动构建的。
在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。如下图所示。
而在在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:
聚集索引选取规则 :
1.如果存在主键,主键索引就是聚集索引。
2.如果不存在主键,将使用第一个唯一( UNIQUE )索引作为聚集索引。
3。如果表没有主键,或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索 引。
聚集索引和二级索引的具体结构如下图所示。 聚集索引的叶子节点下挂的是这一行的数据 , 二级索引的叶子节点下挂的是该字段值对应的主键值。
执 行如下的 SQL语句时,具体的查找过程如下所示。
具体过程如下:
1. 由于是根据 name 字段进行查询,所以先根据 name='Arm' 到 name 字段的二级索引中进行匹配查 找。但是在二级索引中只能查找到 Arm 对应的主键值 10 。
2. 由于查询返回的数据是 * ,所以此时,还需要根据主键值 10 ,到聚集索引中查找 10 对应的记录,最 终找到10 对应的行 row 。
3 。 最终拿到这一行的数据,直接返回即可。 其中 回表查询是指 ,这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。
1.创建索引
CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ;
2.查看索引
SHOW INDEX FROM table_name ;
3. 删除索引
DROP INDEX index_name ON table_name ;
首先创建一个名为tb_user的表并插入一些数据
create table tb_user( id int primary key auto_increment comment '主键', name varchar(50) not null comment '用户名', phone varchar(11) not null comment '手机号', email varchar(100) comment '邮箱', profession varchar(11) comment '专业', age tinyint unsigned comment '年龄', gender char(1) comment '性别 , 1: 男, 2: 女', status char(1) comment '状态', createtime datetime comment '创建时间' ) comment '系统用户表'; INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime) VALUES ('吕布', '17799990000', 'lvbu666@163.com', '软件工程', 23, '1', '6', '2001-02-02 00:00:00'); INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime) VALUES ('曹操', '17799990001', 'caocao666@qq.com', '通讯工程', 33, '1', '0', '2001-03-05 00:00:00'); INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime) VALUES ('赵云', '17799990002', '17799990@139.com', '英语', 34, '1', '2', '2002-03-02 00:00:00'); INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime) VALUES ('孙悟空', '17799990003', '17799990@sina.com', '工程造价', 54, '1', '0', '2001-07-02 00:00:00');
插入如下的数据
1.如果需求是 ,name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。
则该创建索引的语法为
CREATE INDEX idx_user_name ON tb_user(name);
2.phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。 则该创建索引的语法为
CREATE UNIQUE INDEX idx_user_phone ON tb_user(phone);
3.为profession、age、status创建联合索引。
CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,status);
4.为email建立合适的索引来提升查询效率
CREATE INDEX idx_email ON tb_user(email);
5.查看tb_user表的所有的索引数据
show index from tb_user;
6.删除索引如删除email的索引
DROP INDEX idx_email ON tb_user ;
1.最左前缀法则
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始, 并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效( 后面的字段索引失效 ) 。
2.范围查询
联合索引中,出现范围查询 (>,<),范围查询右侧的列索引失效。所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 <
3.索引失效情况
1.索引列运算
不要在索引列上进行运算操作, 索引将失效,如进行函数运算操作。
2. 字符串不加引号
字符串类型字段使用时,不加引号,索引将失效。
3. 模糊查询
如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
4 .or 连接条件
用 or 分割开的条件, 如果 or 前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会 被用到。
5 . 数据分布影响
如果 MySQL 评估使用索引比全表更慢,则不使用索引。但可以通过sql提示来进行改变。
6.SQL提示
SQL 提示,是优化数据库的一个重要手段,简单来说,就是在 SQL 语句中加入一些人为的提示来达到优 化操作的目的。
1. use index : 建议 MySQL 使用哪一个索引完成此次查询(仅仅是建议, mysql 内部还会再次进 行评估)。使用代码示例如下。
explain select * from tb_user use index(idx_user_pro) where profession = '软件工程';
2. ignore index : 忽略指定的索引。使用代码示例如下。
explain select * from tb_user ignore index(idx_user_pro) where profession = '软件工程';
3. force index : 强制使用索引。使用代码示例如下。
explain select * from tb_user force index(idx_user_pro) where profession = '软件工程';
以上就是关于“sql索引使用规则是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
代做工资流水公司昆明贷款工资流水 查询海口银行流水修改代开宜昌工资代付流水公司佛山银行流水电子版图片莆田代做企业对私流水扬州企业对公流水代办泉州贷款银行流水代办柳州薪资流水沈阳做贷款流水宿迁车贷流水办理新乡开对公流水海口办企业贷流水襄阳打印流水单湛江办入职工资流水淄博代开银行流水修改大连制作银行流水惠州办背调工资流水莆田背调流水查询石家庄查薪资流水南宁薪资流水单代做广州打印银行流水账单鞍山查询签证银行流水漳州开企业贷流水惠州企业对公流水价格湘潭贷款工资流水 打印济南代开日常消费流水泉州办理个人工资流水泰安车贷流水费用黄冈签证银行流水 图片常德贷款流水查询香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤