第19章:索引的创建与设计原则

这篇具有很好参考价值的文章主要介绍了第19章:索引的创建与设计原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、索引的声明与使用

1.1索引的分类

功能逻辑:普通索引,主键索引,唯一索引,全文索引

物理实现方式:聚簇索引和非聚簇索引

作用字段个数:单列索引和联合索引

1.普通索引

对表中的任何字段都可以创建,没有限制条件。如:student表中的name字段建立一个普通索引,查询记录时根据索引进行查询

2.唯一性索引

使用unique参数设置唯一性索引,唯一可为空,一个表有多个唯一性索引。如:student表中的email字段创建唯一索引

3.主键索引

一个表中最多有一个主键(非空且唯一),只能有一个主键索引。因为主键索引是物理实现方式决定的,数据存储在文件中按照一种顺序存储

4.单列索引

作用于单个字段的索引

5.组合索引

多个字段的组合创建一个索引,使用组合索引遵循最左前缀集合。如:id和name建立一个索引idx_id_name

6.全文索引

全文索引只能创建在char,varchar,text类型字段上。查询数据量大的字符串使用全文检索提高效率。如student表值information是text类型。

7.总结

第19章:索引的创建与设计原则

 1.2创建索引

创建表添加索引:create table 表名(index(字段名));

修改表添加索引:alter table 表名  add index(字段名)

1. 创建表添加索引

【格式】

第19章:索引的创建与设计原则

 ①有主键约束,唯一约束,外键约束,自动创建索引

CREATE TABLE dept( 
dept_id INT PRIMARY KEY AUTO_INCREMENT, 
dept_name VARCHAR(20) 
); 
CREATE TABLE emp( 
emp_id INT PRIMARY KEY AUTO_INCREMENT, 
emp_name VARCHAR(20) UNIQUE, 
dept_id INT, 
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id) 
);

②创建普通索引

创建表最后时,添加index(字段名)

CREATE TABLE book( 
book_id INT , 
book_name VARCHAR(100), 
authors VARCHAR(100), 
info VARCHAR(100) , 
comment VARCHAR(100), 
year_publication YEAR, 
INDEX(year_publication) 
);

命令查看索引:

show create table book;
或
show index from book;

③创建唯一索引

CREATE TABLE test1( 
id INT NOT NULL, 
name varchar(30) NOT NULL, 
UNIQUE INDEX uk_idx_id(id) 
);

④主键索引:创建主键时自动创建

create table student(
id int(10) primary key,
no varchar(10),
name varchar(20)
);

查看索引

show index from student

第19章:索引的创建与设计原则

 删除索引

alter table student
drop primary key

修改索引:必须先删除掉(drop)原索引,再新建(add)索引

⑤创建组合索引

create table book2(
id int,
name varchar(100),
authors varchar(100),
index mul_id_name_(id,name)
);

2. 修改表添加索引 add index(字段名)

第19章:索引的创建与设计原则

 3.删除表的索引

第19章:索引的创建与设计原则

 删除表中的列对删除对应的索引

二、索引的设计原则

1.哪些情况适合创建索引

①有唯一限制的字段

如:学生表的学号是唯一的,为该字段创建唯一索引很快确定某个学生的信息,使用姓名查询会存在同名现象,降低查询速度

第19章:索引的创建与设计原则

 

②频繁where查询条件的字段

某个字段在SELECT语句的 WHERE 条件中经常被使用到,那么就需要给这个字段创建索引了。尤其是在数据量大的情况下,创建普通索引就可以大幅提升数据查询的效率。

③经常group by和order by的字段

提高分组和排序查询

索引就是让数据按照某种顺序存储,使用group by和order by需要对分组或者排序进行索引

④对更新,删除的where条件列

在进行更新或删除的时候,我们需要根据where条件列检索出这条记录,对他更新和删除。如果更新的是非索引字段,效率会更明显,更新后不需要对索引进行维护

⑤distinct去重字段需要创建索引

对某个字段进行去重,使用distinct,对这个字段创建索引,提升查询效率。因为会根据这个去重字段进行排序,相同的都在一块,所以查询速度变快

⑥多表join查询的时候注意事项

表不要超过3张,对where条件创建索引,对连接字段创建索引类型要一致。

⑦使用列的类型小的创建索引

数据类型越小,索引占用内存越少,一个数据页放下更多的记录,查询速度快。适用于主键

⑧使用字符串的前缀创建索引

字符串很长,创建索引占空间大,所以需要截取前面一部分,叫做前缀索引

虽然查找记录不能精准的定位到记录的位置,但是能定位相应的前缀所在的位置,然后根据主键值进行回表查询。

第19章:索引的创建与设计原则

 

选择字符串长度的公式:

count(distinct left(列名, 索引长度))/count(*)

越接近于1,说明的重复的低,接近于唯一性。此刻的索引长度最好。一般字符串类型的数据,长度为20的索引,区分度达90%以上。前缀索引排序可能不准确

第19章:索引的创建与设计原则

⑨区分度高的列适合作为索引,数据重复低的

count(distinct left(列名, 索引长度))/count(*)

越接近于1,说明的重复的低,接近于唯一性。此刻的索引长度最好。超过33%比较好的索引。

⑩联合索引:频繁的列在左

 【补充】联合索引比单值索引效果好

2.限制索引的数目,单表不超过6个

①索引占磁盘空间,索引多,磁盘空间就越大

②索引影响更新操作(增删改),表中数据修改,索引会修改

③优化器在优化查询的时候,通过索引进行评估,多个索引,增加优化器的执行计划时间,降低查询性能。

3.哪些情况不适合创建索引

①where条件中使用不到的字段,不要设置索引。索引的价值是快速定位,起不到作用的不用索引

第19章:索引的创建与设计原则

 只对student_id创建索引就可以,其他字段不需要

②数据量小的表最好不要使用索引

记录小于1000,是否创建索引对查询效率影响不大

③有大量重复数据的字段不适合建立索引

④经常更新的表不要创建过多的索引

更新数据的时候,也要更新索引,索引提高了查询效率,但是降低了更新效率。

⑤不用无序的值作为索引

比如:身份证,UUID

3.小结

索引能提高查询效率,但是降低插入和更新的速度并占内存。

选择索引的最终目的是为了查询速度变快文章来源地址https://www.toymoban.com/news/detail-484425.html

到了这里,关于第19章:索引的创建与设计原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 创建型模式 (Creational Patterns) 玄子Share 设计模式 GOF 全23种 + 七大设计原则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位计算机科学家(Erich Gamma、Ri

    2024年02月12日
    浏览(26)
  • 使用elasticsearch创建索引时报错

    最近在使用时创建索引的时候 , 出现以上的错误 我的代码如下 : 这个时候出现错误 错误详细信息如下: 解决方法 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 解决 : 查看自己导入的包是哪个 , 使用这个包就可以正常运行了

    2024年02月11日
    浏览(31)
  • 索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划

    开干 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的

    2023年04月09日
    浏览(28)
  • Java的编程之旅19——使用idea对面相对象编程项目的创建

    在介绍面向对象编程之前先说一下我们在idea中如何创建项目文件 使用快捷键Ctrl+shift+alt+S 新建一个模块,点击“+”,再点New Module 点击Next   我这里给Module起名叫OOP,就是面向对象编程的英文缩写,再点击下面的Finish  点Apply或OK均可 右键src 再点击 New----Package 自定义包名(建

    2024年02月22日
    浏览(28)
  • MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

    一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句: 使用 FORCE INDEX(索引名称)走索引: 2、使用 USE INDEX 语句: 使用 USE INDEX(索引名称)走索引: FORCE INDEX 或 USE INDEX 的区别? FORCE INDEX :这个语句指示MySQL强制查询使用特定的索引。它会忽略优化器的选择,无论索引

    2024年02月03日
    浏览(39)
  • 使用模板创建【vite+vue3+ts】项目出现 “找不到模块‘vue‘或其相应的类型声明” 的解决方案

    项目前台需要使用Vue3+Ts来写一个H5应用,然后我用模板创建 创建完后进入 HelloWorld.vue ,两眼一黑 然后在 tsconfig.json 的 \\\"compilerOptions\\\" 中添加 修改 \\\"moduleResolution\\\" 值为 \\\"node\\\"

    2024年02月17日
    浏览(44)
  • 前端TypeScript学习day05-索引签名、映射与类型声明文件

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)              目录 索引签名类型  映射类型 索引查询(访问)类型 基本使用  同时查询多个索引的类型  TypeScript 类型声明文件  概述 TS 的两种文件类型  类型声明文件的

    2024年02月08日
    浏览(37)
  • 【PostgreSQL在线创建索引(CIC)功能的锁分析以及使用注意】

    前一篇文章提到了普通创建索引会阻塞DML操作 PostgreSQL创建索引的锁分析和使用注意 而PostgreSQL里可以使用create index concurrently 在线创建索引(CIC)功能,降低创建索引在表上申请的锁的级别,ShareUpdateExclusiveLock级别的锁和RowExclusiveLock不冲突,不会阻塞表上的DML操作。 1.1 在线创

    2024年02月01日
    浏览(38)
  • 使用kibana来创建ElasticSearch的索引库与文档的命令

    本篇博客主要以介绍使用kibana来创建ElasticSearch的索引库与文档的命令语句 操作 效果 创建索引表 查询(索引)表结构 修改(索引)表结构 删除表结构 操作 效果 插入文档 修改文档 查询文档 检索文档 删除文档 |

    2024年01月18日
    浏览(52)
  • MySQL面试题入门:四大范式、SQL生命周期、SQL六大语言、索引、最左匹配原则....

    第一范式:属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 第二范式:满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分) 第三范式:

    2024年04月26日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包