SQL优化

由于最近准备跳槽换个单位,前天面试时碰到一份这样的SQL笔试题, 小弟才疏学浅当时没有答好,不过还是学习了,得感谢这个公司啊;建表语句如下;

这里写图片描述

我挑了几个有意思的题 贴出来;

优化以下SQL语句, 说出你的思路
1. SELECT * FROM customer WHERE substring(custname,1,4)='chas'

  1).应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描;
  2).字段是否可以考虑拆分; 
  3).修改为
     SELECT * FROM customer WHERE custname like'chas%'

2. SELECT * FROM customer WHERE money /30  < 1000 
   计算放到后面即可;

3. SELECT * FROM customer WHERE custname=3721
   用具体的字段列表代替“*”,不要返回用不到的任何字段,标示出返回字段要比 * 的效率高;

4. SELECT * FROM customer WHERE custname <> 'chas'
       应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描;
       如果是数字的话可以使用这种 :

  select * from staff_member where dept_no < 2001
    Union all
  select * from staff_member where dept_no > 2001;

5. SELECT * FROM secoundinfo s WHERER s.custid NOT IN (SELECT c.custid FROM customer c)

   innot in 也要慎用,否则会导致全表扫描;
   not in 可以考虑用 not EXISTS

起码说明是公司用过心出的笔试题,考点大多是索引 和 联合索引,还有部分没贴出来,如果你有更好的优化方式欢迎探讨, 或者觉得我修改部分有不对的欢迎抛砖;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值