浅谈sql索引

前言

当面对几万条记录的表时,指定查询某个字段的值就会变得特别慢,这对我们工作来说,显然是不可以接受的,自然想到提高数据库性能,说起提高数据库性能,索引是最物美价廉的东西了,不用改程序,不用调sql,查询速度就可能提高千百倍。


一、索引是什么?

索引是数据库中用于提高查询效率的技术,类似于目录。为什么使用索引:如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止。举个简单的例子。
这是一个emp表,有id和name两个字段,现在我需要你找id=4的人的信息,我相信大家都会写

SELECT * FROM emp WHERE id=4

那我们的sql系统是怎么响应的,它会遍历数据,进行全表扫描,他发现1!=4,接着往下找,直到4=4时,返回信息,如果我的表有10万个人呢?这个工作量就很大了。这时候我们就需要用索引

id 字段 name字段
1 joy
2 jack
3 s
4 a
5 d

索引的原理类似二叉树(简单画一下),把中间数找出来,比它小的放左边,比它大的放右边,这样select起来就很很快
在这里插入图片描述

二、使用步骤

1.索引的分类(基本的索引)

1.主键索引
primary key
2.唯一索引
unique
3.普通索引
index
4.全文索引
solr和es(java开发中用到,这里不讲)

2.索引的增删改查操作

先多创建几张测试表

CREATE TABLE test (id INT, `name` VARCHAR (32))
CREATE TABLE test1 (id INT, `name` VARCHAR (32))
CREATE TABLE test2 (id INT, `name` VARCHAR (32))
CREATE TABLE test3 (id INT, `name` VARCHAR (32))

给它id字段加个主键索引该怎么写呢,代码如下:

ALTER TABLE test ADD PRIMARY KEY (id) 

注意:当表创建的时候指定主键约束字段时,自然而然的是一个主键索引
这里就有个概念:聚集索引:给表添加主键约束的时候数据库会自动通过主键创建索引,这个索引称为聚集索引。 聚集索引的磁盘块中保存数据

CREATE TABLE ts (id INT PRIMARY KEY, `name` VARCHAR (32))

给它id字段加个唯一索引该怎么写呢,代码如下

CREATE UNIQUE INDEX id_index ON test1 (id) 

注意:当表创建的时候指定唯一约束字段时,自然而然的是一个唯一索引

CREATE TABLE ta (id INT UNIQUE, `name` VARCHAR (32))

给它id字段加个普通索引该怎么写呢,代码如下

CREATE INDEX id_index ON test2 (id)

或者这样写

ALTER TABLE test3 ADD INDEX id_index (id) 

删除索引就比较简单 格式: drop index 索引名 on 表名;

DROP INDEX id_index ON test2

修改索引就相当于先删除再添加
最后是查看索引index(也可以不加es)

SHOW INDEXES FROM test2

或者是

SHOW KEYS FROM test2

总结

1.比较频繁的作为查询条件字段应该创建索引。
2.索引并不是越多越好,因为索引会占用存储空间,只针对常用的查询字段创建索引。
3.有索引也不一定好,如果数据量小,添加索引反而会降低查询效率。
4.更新非常频繁的字段不适合创建索引
5.不出现在where字句中的字段不该创建索引。

猜你喜欢

转载自blog.csdn.net/qq_51308214/article/details/123641187