(10)MySQL:索引
索引技术就是为了让数据库 更快的定位一条数据所采用的一种查询性能优化技术。
索引是一种有效组 合数据的方式,为快速查找到指定记录。
作用:大大提高数据库的检索速度、改善数据库性能。
MySQL索引按存储类型分类B-树索引、哈希索引。
普通索引:基本索引类型;允许在定义索引的列中插入重复值和空值
唯一索引:索引列数据不重复;允许有空值
主键索引:主键列中的每个值是非空、唯一的;一个主键将自动创建主键索引
复合索引:将多个列组合作为索引
全文索引:支持值的全文查找;允许重复值和空值
空间索引:对空间数据类型的列建立的索引
CREATE INDEX indexName ON mytable(username(length));
ALTER table tableName ADD INDEX indexName(columnName);
CREATE TABLE `table` (字段1,字段2,……,INDEX [indexName] (username(length)));
CREATE UNIQUE INDEX indexName ON mytable(username(length))
ALTER table mytable ADD UNIQUE [indexName] (username(length))
CREATE TABLE `table` (字段1,字段2,……,UNIQUE [indexName] (username(length)));
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
mysql> ALTER TABLE testalter_tbl DROP INDEX c;
如果想要更改列的类型而不是名称, CHANGE语法仍然要求旧的和新的列名称,即使旧的和新的列名称是一样的
使用MODIFY来改变列的类型,此时不需要重命名
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
DROP INDEX [indexName] ON mytable;
SHOW INDEX FROM table_name;
create INDEX index_student_sname on student(s_name);
show index from student;
Table:创建索引的表
Non_unique:索引是否非唯一
Key_name:索引的名称
Column_name:定义索引的列字段
Seq_in_index:该列在索引中的位置
Null:该列是否能为空值
Index_type:索引类型
DROP INDEX index_student_sname on student;
(一) 按照下列标准选择建立索引的列
1.频繁搜索的列
2.经常用作查询选择的列
3.经常排序、分组的列
4.经常用作连接的列(主键/外键)
(二) 请不要使用下面的列创建索引
1.仅包含几个不同值的列
2.表中仅包含几行
(三) 使用索引时注意事项
1.查询时减少使用*返回全部列,不要返回不需要的列
2.索引应该尽量小,在字节数小的列上建立索引
3.WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
4.避免在ORDER BY子句中使用表达式