3、慢查询的优化案例
1、函数Max()的优化
用途:查询最后支付时间-优化max()函数 语句:
代码语言:javascript复制select max(payment_date) from payment;
执行计划:
代码语言:javascript复制explain select max(payment_date) from payment;
可以看到显示的执行计划,并不是很高效,可以拖慢服务器的效率,如何优化了? 创建索引
代码语言:javascript复制create index inx_paydate on payment(payment_date);
索引是顺序操作的,不需要扫描表,执行效率就会比较恒定,
2、函数Count()的优化
需求:在一条SQL中同时查处2006年和2007年电影的数量
错误的方式: 语句:
代码语言:javascript复制select count(release_year='2006' or release_year='2007') from film;
2006和2007年分别是多少,判断不出来
代码语言:javascript复制 select count(*) from film where release_year='2006' or release_year='2007';
正确的编写方式:
代码语言:javascript复制select count(release_year='2006' or null) as '06films',count(release_year='2007' or null) as '07films' from film;
区别:count(*)和count(id) 创建表并插入语句
代码语言:javascript复制 create table t(id int);
insert into t values(1),(2),(null);
代码语言:javascript复制Count(*):select count(*)from t;
代码语言:javascript复制Count(id):select count(id)from t;
说明: Count(id)是不包含null的值 Count(*)是包含null的值