提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
索引使用
诸如此类查询,根据主键来查询以及 根据二级索引的字段查询,都是不需要回表的,能够直接给出结果
一次扫描即可完成
但是:
select id,name,gender from tb_user where name = 'Arm';
执行这条sql语句的时候,会怎么做呢?
一张表,有四个字段(id, username, password, status),由于数据量大,需要对以下SQL语句进行优化,该如何进行才是最优方案:
select id, username, password from tb_user where username='itcast';
解:给username和password字段建立联合索引,则不需要回表查询,直接覆盖索引
当字段类型为字符串(varchar, text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率,此时可以只降字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。
比如我们email字段可以取前缀
语法:
create index idx_xxx on table (column(n))
其中n代表要拿索引的前n个字符作为前缀
索引创建过程:
select * from tb_user where email='lvu666@163.com';
单列索引:即一个索引只包含单个列
联合索引:即一个索引包含了多个列
在业务场景中,如果存在多个查询条件,考虑针对于查询字段建立索引时,建议建立联合索引,而非单列索引。