温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • sql索引使用规则是什么

sql索引使用规则是什么

发布时间:2023-04-03 16:19:50 来源:亿速云 阅读:79 作者:iii 栏目: 开发技术

这篇“sql索引使用规则是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“sql索引使用规则是什么”文章吧。

    1.索引概述

    1.1索引介绍

    索引(index)是帮助 MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足 特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构 上实现高级查找算法,这种数据结构就是索引。

    1.2索引的优劣势

    sql索引使用规则是什么

    2.索引结构

    2.1 概述

    MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构,主要包含以下几种:如下图所示:

    sql索引使用规则是什么

    上述是MySQL中所支持的所有的索引结构,不同的存储引擎对于索引结构的支持情况如下图所示。平常所说的索引,如果没有特别指明,都是指B+树结构组织的索引。

    sql索引使用规则是什么

    在 MySQL 5.5 之后, InnoDB是默认的 MySQL 存储引擎,InnoDB引擎的默认索引是B+tree。 MySQL 索引数据结构对经典的 B+Tree 进行了优化。在原 B+Tree的基础上,增加一个指向相邻叶子节点 的链表指针,就形成了带有顺序指针的B+Tree,如下图所示。这提高区间访问的性能,利于排序。并且InnoDB 中具有自适应 hash 功能, hash 索引是 InnoDB存储引擎根据 B+Tree 索引在指定条件下自动构建的。

    sql索引使用规则是什么

    3. 索引分类

    3.1 索引分类

    在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。如下图所示。

    sql索引使用规则是什么

    3.2 聚集索引&二级索引

    而在在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:

    sql索引使用规则是什么

    聚集索引选取规则 :

    1.如果存在主键,主键索引就是聚集索引。

    2.如果不存在主键,将使用第一个唯一( UNIQUE )索引作为聚集索引。

    3。如果表没有主键,或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索 引。

    聚集索引和二级索引的具体结构如下图所示。 聚集索引的叶子节点下挂的是这一行的数据 , 二级索引的叶子节点下挂的是该字段值对应的主键值。

    sql索引使用规则是什么

    执 行如下的 SQL语句时,具体的查找过程如下所示。

    具体过程如下:

    1. 由于是根据 name 字段进行查询,所以先根据 name='Arm' 到 name 字段的二级索引中进行匹配查 找。但是在二级索引中只能查找到 Arm 对应的主键值 10 。

    2. 由于查询返回的数据是 * ,所以此时,还需要根据主键值 10 ,到聚集索引中查找 10 对应的记录,最 终找到10 对应的行 row 。

    3  。 最终拿到这一行的数据,直接返回即可。 其中 回表查询是指 ,这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。

    sql索引使用规则是什么

    索引使用

    4.1索引语法

    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 ;

    4.2创建演示

    首先创建一个名为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');

    插入如下的数据

    sql索引使用规则是什么

    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 ;

    5.索引法则

    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索引使用规则是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节
    推荐阅读:
    1. SQL中EXPLAIN命令怎么用
    2. sql注入语句有三种分别是什么

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    sql
    • 上一篇新闻:
      Java数据结构之插入排序与希尔排序怎么实现
    • 下一篇新闻:
      JavaScript与C++的差异是什么

    猜你喜欢

    • spring事务管理的方式有哪几种
    • Java中string类和stringbuffer类有什么区别
    • java创建二维数组的方式有哪几种
    • linux安装hadoop要注意哪些问题
    • linux安装hadoop的步骤是什么
    • linux安装hadoop后怎么使用
    • ubuntu如何安装hadoop伪分布
    • hadoop伪分布式环境如何搭建
    • hadoop伪分布式的作用是什么
    • mysql查询时区的方法是什么
    最新资讯
    • PostgreSQL如何保证数据的持久性
    • 如何诊断和解决PostgreSQL中的死锁问题
    • 在PostgreSQL中如何使用事件触发器来监控数据库更改
    • 如何在PostgreSQL中使用触发器自动维护历史记录
    • 如何在PostgreSQL中进行跨数据库查询
    • PostgreSQL的缓存是如何工作的
    • PostgreSQL中的死锁是如何检测和解决的
    • 讨论如何在Core Data项目中引入测试驱动开发和持续集成流程
    • 描述在Core Data中如何针对特殊用例定制和优化存储策略
    • 如何在Core Data应用中实现跨平台数据共享与同步同时确保数据一致性和完整性
    相关推荐
    • SQL中where和having有什么区别
    • Sql中执行的顺序是怎么样的
    • SQL分组函数group by和聚合函数COUNT、MAX、MIN、AVG、SUM是什么以及怎么用
    • SQL中各种连接Join的示例分析
    • SQL中Join的使用示例
    • sql中如何将full join改为left join +union all
    • SQ中查询底层运行原理是什么
    • 如何有效防止sql注入
    • 如何在SQL中使用Group By
    • SQL中怎么实现WHERE IN参数化编译

    相关标签

    mysql8 -mysql mysql索引 mysql编码 sqlprompt mysql 5.7 mysql主从复制配置 mysqli connect mysql. sqliteopenhelper sql 优化 mysql服务 mysql升级 newsql mysql全量备份 mysql 8.0.17 pl/sql sql索引 mysql版本号 sql server
    AI

    代做工资流水公司昆明贷款工资流水 查询海口银行流水修改代开宜昌工资代付流水公司佛山银行流水电子版图片莆田代做企业对私流水扬州企业对公流水代办泉州贷款银行流水代办柳州薪资流水沈阳做贷款流水宿迁车贷流水办理新乡开对公流水海口办企业贷流水襄阳打印流水单湛江办入职工资流水淄博代开银行流水修改大连制作银行流水惠州办背调工资流水莆田背调流水查询石家庄查薪资流水南宁薪资流水单代做广州打印银行流水账单鞍山查询签证银行流水漳州开企业贷流水惠州企业对公流水价格湘潭贷款工资流水 打印济南代开日常消费流水泉州办理个人工资流水泰安车贷流水费用黄冈签证银行流水 图片常德贷款流水查询香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化