当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此时就需要用索引来加速SQL查询。
由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O *** 作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O *** 作,降低了SQL的查询效率,适得其反,因此掌握良好的索引创建原则非常重要!
索引分类索引是创建在表上的,是对数据库表中一列或者多列的值进行排序的一种结果。索引的核心是提高查询的速度!
索引的优点: 提高查询效率
索引的缺点: 索引并非越多越好,过多的索引会导致CPU使用率居高不下,由于数据的改变,会造成索引文件的改动,过多的磁盘I/O造成CPU负荷太重
逻辑上可以分为:
- 主键索引,主键字段会自动生成索引
- 唯一索引,唯一键默认也会生成唯一索引,但是非聚簇索引
- 普通索引,没有任何限制条件,可以给任何类型的字段创建普通索引(创建新表&已创建表,数量是不限的,一张表的一次sql查询只能用一个索引 where a=1 and b=‘M’)
- 全文索引,使用FULLTEXT参数可以设置全文索引,只支持CHAR,VARCHAR和TEXT类型的字段上,常用于数据量较大的字符串类型上,可以提高查询速度(线上项目支持专门的搜索功能,给后台服务器增加专门的搜索引擎支持快速高校的搜索 elasticsearch 简称es C++开源的搜索引擎 搜狗的workflflow)
创建表时指定索引字段
CREATE TABLE index1( id INT, name VARCHAR(20), sex ENUM('male', 'female'), INDEX(id,name) );
在已经创建好的表上添加索引
CREATE [UNIQUE] INDEX 索引名 ON 表名(属性名(length) [ASC | DESC]); //举例 create index pwdidx on t_user(password);
删除索引
DROP INDEX 索引名 ON 表名;总结
- 经常用where过滤的字段要建索引
- 字符串创建索引时要注意字符串的强度,不能让key过长
- 索引字段涉及强制转换、函数调用、表达式计算等,索引就用不上
C/C++Linux服务器开发/后台架构师
Golang DevOps项目实战
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)