索引额外问题(定位优化慢查询、最左匹配)

  • 为什么要使用索引?
    因为索引能够让我们避免全表扫描去查找数据。提升检索效率

  • 什么样的信息能成为索引
    主键为一键等只要能够让数据呈现出一定区分性的字段

  • 索引的数据结构
    主流是B+树,还有哈希结构、BitMap等。其中MySQL不支持BitMap,同时基于InnoDB和MyISAM的MySQL不显示支持Hash

衍生出来的问题,以mysql为例

  • 如何定位并优化慢查询Sql

1、根据慢日志定位慢查询sql
2、使用explain等工具分析这条sql
3、修改sql或者尽量让sql走索引

-show variables like ‘%quer%’;
-show status like ‘%slow_queries%’;
set global slow_query_log = on;
set global long_query_time = 1;

show variables like ‘%quer%’;
show status like ‘%slow_queries%’

制造慢查询
select count(id) from person_info_large;
(explain)select name from person_info_large order by name desc;

explain关键字段:
type:
出现 index或者all就有可能需要优化了
extra:
在这里插入图片描述
优化:
例如name没有索引:
加索引: alter table person_info_large add index idx_name(name);
select name from person_info_large order by name desc;

  • 联合索引的最左匹配原则的成因

最左前缀匹配:会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配。
=和in可以乱序。
第一个字段是绝对有序的

  • 索引是建立的越多越好吗

不是,
1、优先数据小的表不需要建立索引,建立会增加额外的索引开销
2、数据变更需要维护索引,因此更多的索引意味着更多的维护成本
3、更多的索引意味着也需要更多的空间。

猜你喜欢

转载自blog.csdn.net/qq_37873484/article/details/87864427
今日推荐