前言
当面对几万条记录的表时,指定查询某个字段的值就会变得特别慢,这对我们工作来说,显然是不可以接受的,自然想到提高数据库性能,说起提高数据库性能,索引是最物美价廉的东西了,不用改程序,不用调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字句中的字段不该创建索引。