首页 > 数据库 >​关系型数据库(九)SQL索引

​关系型数据库(九)SQL索引

时间:2024-09-16 10:21:25浏览次数:10  
标签:name 创建 数据库 PRIMARY 查询 索引 SQL

索引(Index):

索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。但是目录是要占页数的,数据库的索引页也是要占空间的

数据库在未添加索引进行查询的时候默认是进行全文搜索,也就是说有多少数据就进行多少次查询,然后找到相应的数据就把它们放到结果集中,直到全文扫描完毕。

创建相应的索引,数据库会直接在索引中查找符合条件的选项.

索引的存储原理大致可以概括为一句话:以空间换时间。

一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)

索引的优点:

(1)加快数据检索速度 (创建索引主要原因)

(2)创建唯一性索引,保证数据库表中每一行数据的唯一性

(3)加速表和表之间的连接

(4)使用分组和排序子句对数据检索时,减少检索时间

(5)使用索引在查询的过程中,使用优化隐藏器,提高系统的性能

索引的缺点:

(1)创建索引和维护索引要耗费时间,时间随着数据量的增加而增加

(2)索引需要占用物理空间和数据空间

(3)表中的数据操作插入、删除、修改, 维护数据速度下降、

MySQL支持多种类型的索引

(1)普通索引:

普通索引是最常见的索引类型。

   - 它用于加速查询操作,提高查询性能。

   - 允许重复值,可以在一个字段上创建多个普通索引。

单列索引

复合索引

满足复合索引的查询的两大原则:
假如创建的复合索引为三个字段,按顺序分别是(name,age,sex)
在查询时能利用复合索引的查询条件如下:

  1. 唯一索引: 加速查询 + 列值唯一(可以有null)

     唯一索引要求索引列的值是唯一的,不允许重复值。

   - 它用于保证数据的唯一性约束。

   - 唯一索引可以加速唯一性检查和查找操作。

  1. 主键索引: 加速查询 + 列值唯一(不可以有null)+ 表中只有一个
  2. 全文索引: 对文本的内容进行分词,进行搜索 (注意:目前仅有MyISAM引擎支持)

  在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为 PRIMARY KEY 或 UNIQUE 索引。对于单列唯一性索引,这保证单列不包含重复的值。对于多列唯一性索引,保证多个值的组合不重复。

PRIMARY KEY 索引和 UNIQUE 索引非常类似。事实上,PRIMARY KEY 索引仅是一个具有名称 PRIMARY 的 UNIQUE 索引。这表示一个表只能包含一个 PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

ALTER TABLE用来创建普通索引、UNIQUE 索引或 PRIMARY KEY 索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

CREATE INDEX

CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list)

创建索引的注意事项

只要列中包含有 NULL 值都将不会被包含在索引中,复合索引中只要有一列含有 NULL 值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

  MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

在 where 从句,group by 从句,order by 从句,on 从句中虚线的列添加索引。

索引字段越小越好(因为数据库数据存储单位是以“页”为单位的,数据存储的越多,IO 也会越大)。

查询中与其它表关联的字段需要添加索引。

对一些经常处理的业务表应在查询允许的情况下尽量减少索引。

假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

但是,使用索引一定能提高查询性能吗?

大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。

标签:name,创建,数据库,PRIMARY,查询,索引,SQL
From: https://blog.csdn.net/sadfasdfsafadsa/article/details/142299419

相关文章

  • mysql5.5源码主从复制搭建(以两台机器的单实例为例)
    mysql5.5源码主从复制搭建(以两台机器的单实例为例)如果对运维课程感兴趣,可以在b站上、csdn或微信视频号上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频项目1  配置mysql服务器的主从结构(开始时主从数据不一致时需要找到临界点的主从同步,主库初始......
  • SQL:查询每个类别最新的5条记录
    场景根据主表的ID列表,查询各个ID的text_comment中最新的5条记录。table:text_commentfield:text_uuidben发布于博客园v1:使用unionselect*from(select*fromtext_commentwheretext_uuid='cf6fd43a5f0527840fcdbbad55ce44c5'orderbycreate_timedesclim......
  • MYSQL面试系列-04
    MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息......
  • MySQL锁机制揭秘:从行锁到表锁,共享锁到排他锁,悲观锁到乐观锁的全面解读
    MySQL有哪些锁1、按照锁的粒度划分行锁是最低粒度的的锁,锁住指定行的数据,加锁的开销较大,加锁较慢,可能会出现死锁的情况,锁的竞争度会较低,并发度相对较高。但是如果where条件里的字段没有加索引,则加的行锁会自动升级为表锁,因为行锁是基于索引去进行操作的,所以想要加行锁,就......
  • 一文看完MySQL 9.0新特性!
    本文总结自MySQL8.4以来,在MySQL9.0中新增、废弃、更改和删除的内容。MySQL9.0中新增或更改的功能。1MySQL9.0新特性1VECTOR类型支持MySQL9.0支持VECTOR列类型。向量是一个数据结构,它由条目列表(4字节浮点值)组成,可以表示为二进制字符串值或列表格式字符串。VECT......
  • mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
    1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能......
  • 数据库tips19
    分布式数据库系统中的两阶段提交协议(2PC),其内容为:协调器向所有参与者发送Prepare消息;各参与者若愿意提交属于自己的部分,则向协调器发ready消息,否则发abort消息;协调器收到所有参与者的ready消息后,方能再向所有参与者发commit消息,否则若超时或有一个参与者发来了abort消息,则协调......
  • MySQL间隙锁,next-key锁
    间隙锁间隙锁是对索引记录之间的间隙的锁,或者是对第一个索引记录之前或最后一个索引记录之后的间隙的锁。例如,SELECTc1FROMtWHEREc1BETWEEN10and20FORUPDATE;阻止其他事务将的值插入15到列中t.c1,无论列中是否已经存在任何此类值,因为该范围内所有现有值之间的......
  • MySQL练手题--体育馆的人流量(困难)
    一、准备工作CreatetableIfNotExistsStadium(idint,visit_dateDATENULL,peopleint);TruncatetableStadium;insertintoStadium(id,visit_date,people)values('1','2017-01-01','10');insertintoStadium(id,visit_date,......
  • 【大数据分析】基于Spark哔哩哔哩数据分析舆情推荐系统 b站(完整系统源码+数据库+开发
    文章目录【大数据分析】基于Spark哔哩哔哩数据分析舆情推荐系统b站(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅一、项目概述二、研究意义三、背景四、国内外研究现状五、开发技术介绍六、算法介绍 七、数据库设计 八、系统启动九、项目展......