在项目开发阶段 开发人员只需要把功能实现 测试 上线 上线之后 随着数据量的增加(数据量大了) 你会发现有些页面加载的时候会很慢这就是sql查询的时候变慢了 需要优化sql查询语句
为什么需要优化SQL这个问题 好像是傻*问题 PS:嘻嘻嘻嘻嘻
– 自己观察就好了 不想打字了 不好意思爸爸们
show status like 'com_______'; -- 查询你本次打开数据crud次数 show global status like 'com_______'; -- 查询数据库从出生到现在crud次数 show global status like 'Innodb_rows_%'; -- show processlist; EXPLAIN 跟sql EXPLAIN select * from user ; SELECT @@have_profiling; show profiles; -- 查看刚刚sql 耗时 show profile for QUERY 150; -- 150 是上句查询出来的编号
索引类型需要转换的时候 eg: 索引本来是 int 你条件查询的时候 带引号给它转成了varchar 。 或者反过来了 a 是 int 索引 select * from user where a = 1; -- 索引生效 select * from user where a = '1'; -- 索引生效个卵子 反过来也是 a 是 varchat 可以自己试试
like 以“%” 开头的情况 eg: select * from user where name like ‘%豪’
or 当or左右查询字段只有一个是索引,索引失效,只有当or左右查询字段都有索引时,才会生效 eg :爸爸按照儿子说的 试一下就知道了
组合索引 eg: 组合索引的字段是 a,b,c 查询的时候 条件有c的时候 必须带上 a,b字段 条件有b的时候 必须带上 a字段 试试?
is null 索引生效 is not null 索引生效个鸡儿 eg: a 有索引 select * from user where a is null; -- 生效 select * from user where a is not null; -- 生效? 我也想它生效 一般情况下是这样的 我看网上的有文章 有别的说话,可以Google Baidu
左右连接的字段,编码不一样可能导致索引失效 有运算操作 列使用了mysql内置函数 mysql优化器觉得全表扫描比使用索引快:数据量少的时候 使用了 !=、<>