mysql的索引初探(一)

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才会使用索引

 

你可能感兴趣的:(数据库)