Mysql

mysql-黑马-day02- 优化与索引

2020-10-09  本文已影响0人  垃圾简书_吃枣药丸
image.png image.png image.png image.png
image.png
-- Innodb
-- 事物
-- 开启事务
start transaction;

-- 操作
insert into project_user_visit(id, visit_user_name)
values ('10', '喜欢天文的pony');

-- 提交事务
commit;
-- 回滚事务
rollback;
image.png image.png

三、 SQL优化

  1. 查看sql语句的执行频次,哪些操作执行的比较频繁(以插入还是查询为主)
show global status;
-- 查询操作次数
show global status like 'Com_______';
-- 查询Innodb存储引擎下操作的行的数量
show global status like 'Innodb_rows_%';
  1. 定位效率低的SQL


    image.png
-- 查看实时状态-检测每个客户端正在执行的慢SQL
show processlist;
  1. explain分析执行计划
    image.png
  1. show profiles分析SQL
-- 是否开启
select @@have_profiling;
-- 在当前Session会话开启profiling
select @@profiling;
-- 在当前会话开启profiling;
set profiling = 1;
-- 查看记录
show profiles;
image.png
 show profile all for query 2;
 show profile cpu for query 2;
  1. 优化器


    image.png

四、索引的使用

create index idx_username_usermobile_cityname on project_user_visit(visit_user_name,visit_user_mobile,visit_city);
  1. 全值匹配,对索引中所有的列都指定具体值。
explain select * from project_user_visit where visit_user_name='天文' and visit_user_mobile='123' and visit_city='上海市';
image.png
  1. 最左前缀法则
image.png
image.png

与查询条件出现的顺序无关,只与是否出现索引的最左列有关。

image.png
  1. 范围查询右边的列,不能使用索引。


    image.png
    image.png
  2. 不要在索引列上进行运算操作,否则索引将失效


    image.png
  3. 字符串不加单引号会导致索引失效

  1. 尽量查询覆盖索引(索引完全包含查询列),不要使用select *,避免回表查询。

  2. 两个OR关联的条件,OR之后的条件没有索引,则整个查询都不走索引。

explain
select *
from project_user_visit
where visit_user_name = '天文'
   or visit_user_position_name = '促销员';
image.png
  1. 以%开头的like查询不走索引,只加在后面走索引。


    image.png
  1. 如果Mysql评估使用索引比全表扫描更慢,则不走索引。

  2. is null, is not null,有时走索引,有时不走索引。

  1. in走索引。not in 不走索引。---测试下来结果不对

我测试下来如果查询的列被索引字段覆盖了就都走,如果没覆盖就都不走
还要看in里面的内容,如果过长也不会走索引。

image.png
  1. 尽量使用复合索引,而少使用单列索引。
    如: create index idx_xx on tab(a,b,c);
    相当于建立了三个索引

查看索引的使用情况

-- 查看索引的使用情况
show global status like 'Handler_read%';
image.png

五、 SQL优化

1. 大批量插入数据

  1. 在Innodb存储引擎下,使导入的主键是有序的。


    image.png
image.png
  1. 关闭唯一性校验


    image.png
  2. 手动提交事务


    image.png

2. 优化insert语句

image.png

3. 排序优化

image.png image.png image.png

4. group by语句优化

image.png

5. 优化嵌套查询

6. OR的优化

7. 优化分页查询

image.png

8. 使用sql提示

image.png image.png image.png
上一篇下一篇

猜你喜欢

热点阅读