SQL面试题(一)

面试被问到有关Sql优化方面的问题,回答的很不好,痛定思痛,总结一下:
1.数据库尽可能用索引
2.数据库cache尽可能少
3.select尽可能控制返回数目
4.所有传入数据库的数据都要过滤,安全检查和类型检查
5.数据库设计就是尽可能少直接操作大数据字段,需要反复使用的尽可能和很少使用的大字段分离
6.select 子句中避免使用 '* '
7.减少访问数据库的次数
8.整合简单 , 无关联的数据库访问
9.用 TRUNCATE 替代 DELETE(全表时使用,不回滚)
10.尽量多使用 COMMIT
11.用 Where 子句替换 HAVING 子句
12.用 EXISTS 替换 DISTINCT
13.sql 语句用大写
14.避免在索引列上使用计算 避免在索引列上使用 NOT
15.用 >= 替代 >
16.用 UNION 替换 OR ( 适用于索引列 )
17.避免在索引列上使用 IS NULL 和 IS NOT NULL
18.WHERE 替代 ORDER BY
19.避免使用耗费资源的操作 带有 DISTINCT,UNION,MINUS,INTERSECT,ORDER BY 的 SQL 语句会启动 SQL 引擎
执行耗费资源的排序 (SORT) 功能
20.优化 GROUP BY:
21.提高 GROUP BY 语句的效率 , 可以通过将不需要的记录在 GROUP BY 之前过滤掉
22.尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替
23.不用NOT IN操作符(不能应用表的索引),可以用NOT EXISTS或者外连接+null替代
24.不用“<>”或者“!=”操作符(全表扫描)。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替
25.当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用
26.表连接语句应写在其他where条件前,可以过滤掉最大数量记录的条件必须写在where子句的末尾

27.采用union all操作符替代union,因为union all操作只是简单的将两个结果合并后就返回
28.order by语句中的非索引列会降低性能
29. 列表顺序会对SQL执行性能影响,记录最少的表放在最后, 最有效率的表名顺序
30. 连接多个表时,使用表的别名
31. 采用函数处理的字段不能利用索引(substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’))

 

你可能感兴趣的:(sql,面试,cache)