MySQL索引
当表中的数据量到达几十万甚至上百万的时候,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过长
- 索引字段涉及强制转换、函数调用、表达式计算等,索引就用不上
本文介绍了数据库索引的重要性,特别是在大数据量时如何通过索引来提升查询效率。同时,也指出了索引的副作用,如过多的磁盘I/O和CPU使用率。文章详细讲解了主键、唯一索引、普通索引和全文索引的区别,并提供了创建与删除索引的SQL语法。强调了创建索引的原则,如选择经常过滤的字段和避免字段的复杂运算。最后,提到了个人关注的技术领域,如C/C++ Linux服务器开发和Golang DevOps项目实战。
10万+

被折叠的 条评论
为什么被折叠?



