#mysql索引的管理
/*
索引是针对数据所建立的目录
作用:可以加快查询速度
负面影响:降低了增删改的速度
*/
/*
案例:
假设有新闻表,15列,其中10列上有索引,共有100万行数据,如何快速导入
1.把空表的索引全部删除
2.导入数据
3.数据导入完毕后,集中建索引
*/
/*
索引的创建原则
1.不要过度索引
2.在where条件最频繁的列上加
3.尽量索引散列值,过于集中的值加索引,意义不大
*/
/*
索引文件比数据文件大是很常见的,所以不要滥用索引
*/
/*
索引的类型
1.普通索引(INDEX) 仅仅是加快查询速度
2.唯一索引(UNIQUE INDEX) 行上的值不能重复
3.主键索引(PRIMARY KEY) 不能重复
主键必唯一,但是唯一索引不一定是主键
一张表上,只能有一个主键,但是可以有一个或多个唯一索引
4.全文索引(FULLTEXT INDEX) FULLTEXT索引仅可用于MyISAM表
*/
#查看一张表上的所有索引
SHOW INDEX FROM book;
SHOW KEYS FROM book;
#在mysql的dos窗口中,使用如下sql语句,显示数据的时候更方便看
#SHOW INDEX FROM book\G
#EXPLAIN语句可以用作DESC(DESCRIBE)的一个同义词,以下效果相同
EXPLAIN book;
DESC book;
DESCRIBE book;
/*
ALTER TABLE 表名 ADD INDEX /UNIQUE/FULLTEXT[索引名](列名)
ALTER TABLE 表名 ADD PRIMARY KEY(列名) 不要加索引名,因为主键只有一个
*/
CREATE TABLE member(
id INT,
email VARCHAR(30),
tel CHAR(11),
intro text
)ENGINE myisam charset utf8;
#加一个普通索引
ALTER TABLE member ADD INDEX tel (tel);
SHOW KEYS FROM member;
SHOW INDEX FROM member;
#添加一个唯一索引(我这里就不取索引名了)
ALTER TABLE member ADD UNIQUE (email);
SHOW KEYS FROM member;
SHOW INDEX FROM member;
#添加一个全文索引
ALTER TABLE member ADD FULLTEXT (intro);
SHOW KEYS FROM member;
SHOW INDEX FROM member;
#添加一个主键索引
ALTER TABLE member ADD PRIMARY KEY (id);
SHOW KEYS FROM member;
SHOW INDEX FROM member;
/*
删除非主键索引
ALTER TABLE member DROP INDEX 索引名;
删除主键索引
ALTER TABLE member DROP PRIMARY KEY;
*/
ALTER TABLE member DROP INDEX intro;
SHOW KEYS FROM member;
SHOW INDEX FROM member;
ALTER TABLE member DROP INDEX email;
SHOW KEYS FROM member;
SHOW INDEX FROM member;
ALTER TABLE member DROP INDEX tel;
SHOW KEYS FROM member;
SHOW INDEX FROM member;
#删除主键索引
ALTER TABLE member DROP PRIMARY key;
SHOW KEYS FROM member;
SHOW INDEX FROM member;