索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量时间,并造成大量磁盘I/O操作;
为了加快查询,就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
网上有这样一个玩笑:
合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
普通索引
唯一索引
单列索引
组合索引
SHOW INDEX FROM table_name;
-- 索引新建
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX indexName (username(length)) -- length: 指定前缀的长度,每列值的前length个字符为索引
);
-- 大部分的索引前面一部分的长度就能够有很好的区分。 通过减小索引长度,这样能够减小索引文件的大小,能够加快数据的insert。
“索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达90%” --《阿里开发手册》
-- 唯一索引新建
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE index indexName (username(12)) --在新建的时候加上 UNIQUE 关键字即可,后期增加只可以加在没有重复的列上
);
-- 组合索引新建
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
userpass VARCHAR(16) NOT NULL,
index indexName (username(12),userpass(12))
);
-- 唯一组合索引新建
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
userpass VARCHAR(16) NOT NULL,
UNIQUE index indexName (username(12),userpass(12))
);
-- 创建普通单列索引
CREATE INDEX indexName on mytable (col_name(10));
-- 创建单列唯一索引
CREATE UNIQUE INDEX indexName on mytable (col_name(10));
-- 创建普通组合索引
CREATE INDEX indexName on mytable (col_name_one(10),col_name_two(10));
-- 创建组合唯一索引
CREATE UNIQUE INDEX indexName on mytable (col_name_one(10),col_name_two(10));
-- 添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE table_name ADD PRIMARY KEY (col_name)
-- 通过ALTER创建
ALTER TABLE table_name ADD INDEX index_name(col_name);
DROP INDEX index_name ON table_name;
ALTER TABLE table_name DROP INDEX index_name;
在 MySQL 中修改索引可以通过删除原索引,再根据需要创建一个同名的索引,从而实现修改索引的操作。
index ---- 普通索引,数据可以重复
fulltext ---- 全文索引,用来对大表的文本域(char,varchar,text)进行索引
unique ---- 唯一索引,要求所有记录都唯一
primary key ---- 主键索引,也就是在唯一索引的基础上相应的列必须为主键
本文地址:https://blog.csdn.net/li1375942531/article/details/107387697
如对本文有疑问, 点击进行留言回复!!
存在时更新 不存在时新增:merge into using(071问题)
mysql大量的waiting for table level lock怎么办
Leetcode database 刷题 MySQL 简单部分
网友评论