由于最近准备跳槽换个单位,前天面试时碰到一份这样的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)
in 和 not in 也要慎用,否则会导致全表扫描;
not in 可以考虑用 not EXISTS ,
起码说明是公司用过心出的笔试题,考点大多是索引 和 联合索引,还有部分没贴出来,如果你有更好的优化方式欢迎探讨, 或者觉得我修改部分有不对的欢迎抛砖;