网站首页 文章专栏 Mysql-SQL优化案例实践
Mysql-SQL优化案例实践
编辑时间:2020-08-07 18:59 作者:小铨 浏览量:61

1.png

1: SELECT count(*) as num , AVG(monthsalary) FROM customers WHERE gender = 0

2: SELECT city, count(*) as num , AVG(monthsalary) FROM customers GROUP BY city

3: 列出没有手机号码,或者没有照片,或者没有年奖金的客户姓名 。优化建议:
    (1):对于数据表调整,把一些允许为空的字段修改为 0 或其他特殊字符代替,这里我们把一些字段改为默认值为0表示null
因为可为NULL的列使得索引、索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间.
    (2):索引一般不走or,发现并没有使用到索引,主要是因为出现多个索引做联合操作是(多个OR条件),对结果的合并,
排序等操作需要费大量的CPU和内存资源,特别是当其中的某些索引的选择性不高,需要返回合并大量数据时,查询成本更高。
所以这种情况下还不如如走全表扫描。
        可以通过union all / union进行优化,union all主要是将两个select语句的结果作为一个整体显示出来
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,
     
      select name from customers1 where photo = 0
      union all
      select name from customers1 where mobile = 0
      union all
      select name from customers1 where yearbonus = 0;

    (3):索引使用注意: 字符串字段索引值不加引号会失效
4: 不同年龄段(0到100岁之间,每10岁为一个年龄段)的客户平均年收入
  (1):INTERVAL - 比较数字。返回数字在某个区间上的下标
      INTERVAL(N,N1,N2,N3,..........) 
      将N的值与值列表(N1,N2,N3等)进行比较。 如果N '
        ) as age_level, avg((monthsalary * 12 + yearbonus)) as income
      from customers
      group by age_level;
      
5: mysql5.7 max或者min 和group by 有问题
  (1):select id,role_id,max(user_id) from user_role group by role_id;
  (2):mysql> select id,role_id,user_id from (
    -> select * from user_role order by user_id desc
    -> ) as a group by role_id;
  前2个sql都会结果有问题,可以改成:
  select u.id,u.role_id,u.user_id from user_role u,
 (select max(user_id) max_user_id,role_id from user_role group by role_id )
as a where a.max_user_id = u.user_id and a.role_id = u.role_id



    出自:铨程互动

    地址:www.wuhequan.cn

    转载请注明出处!


来说两句吧
最新评论
0.076348s