mysql的索引初探(一):
索引的用处:在数据量比较大的情况下索引可以加快数据得查询速度
索引的缺点:在数据库中大量的使用索引会影响表的性能,索引也会大量占用存储空间,构建过多的索引就会对表的INSERT、UPDATE、DELETE操作会降低效率。
索引的类型:
主键索引,唯一索引,普通索引,全文索引,组合索引
主键索引就是由主键primariy key 修饰的字段,主键索引不允许重复,不允许为空
唯一索引是由关键字 UNIQUE INDEX关键字进行修饰,唯一索引是可以为空但必须唯一
普通索引是普通的列构建的索引,由关键字INDEX修饰,普通索引没有限制
组合索引是由多个列组合构建的索引,多列所组成的字段不允许为空
全文索引用大文本对象的列构建的索引
索引使用的情况:
通常一点说当字段经常使用的时候就可以建立索引,简单一点说就是where字段后的条件
查看表的索引:
SHOW INDEX FROM TABLENAME;
创建索引的方式有三种:创建表时创建索引,单独创建索引,修改表创建索引
单独创建索引:
-- 创建普通索引:
CREATE INDEX t_studentbasic_stu_num ON t_studentbasic(stu_num);
-- 创建唯一索引
CREATE UNIQUE INDEX t_studentbasic_stu_num ON t_studentbasic(stu_num);
-- 创建全文索引
CREATE FULLTEXT INDEX t_studentbasic_stu_num ON t_studentbasic(stu_num);
-- 创建组合索引
CREATE INDEX t_studentbasic_stu_name ON t_studentbasic(stu_num,stu_name);
-- 删除索引
DROP INDEX t_studentbasic_stu_num ON t_studentbasic;
-- 创建表时创建索引
DROP TABLE IF EXISTS `t_login1`;
CREATE TABLE `t_login1` (
`stu_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`stu_num` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`stu_pwd` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`login_type` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
UNIQUE INDEX stu_num (stu_num(12)), -- 创建唯一索引
PRIMARY KEY (`stu_num`), -- 创建主键索引
INDEX (`stu_num`,stu_pwd), -- 创建组合索引
FULLTEXT(stu_num), -- 创建全文索引
INDEX(stu_num) -- 创建普通索引
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- 修改表时创建索引
-- 创建普通索引
ALTER TABLE t_login1 ADD INDEX t_studentbasic_stu_num(stu_num);
-- 创建组合索引
ALTER TABLE t_login1 ADD INDEX t_studentbasic_stu_num(stu_num,stu_pwd);
-- 创建唯一索引
ALTER TABLE t_login1 ADD UNIQUE INDEX t_studentbasic_stu_num(stu_num);
-- 创建主键索引
ALTER TABLE t_login1 ADD PRIMARY KEY t_studentbasic_stu_num(stu_num);
-- 创建全文索引
ALTER TABLE t_login1 ADD FULLTEXT INDEX t_studentbasic_stu_num(stu_num);
-- 查询索引使用情况
explain SELECT * FROM t_login1 WHERE stu_num='123';
那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引