数据库优化
来源:互联网 发布:java的基础知识 编辑:程序博客网 时间:2024/06/08 04:46
1 用PrepareStatement代替statement,因为PrepareStatement会提前编译,并能防止注入攻击
2 不在WHERE字句中使用NULL的判断,尽可能使用NOTNULL来填充数据,使用NULL的话将会使数据库放弃使用索引而进行全表扫描
3 在WHERE中避免使用OR,如果一个字段有索引而另一个字段没有,那么数据库引擎将会放弃使用索引而进行全表扫描,OR可以使用UNIONALL来代替,比如:
SELECTNAME FROM TABLE WHERE num=10 OR NAME=‘张’
最好写成:
SELECTNAME FROM TABLE WHERE num=10
UNIONALL
SELECTNAME FROM TABLE WHERE NAME=‘张’
4 避免在WHERE字句中进行字段的表达式操作,这样将会引发全表扫描
SELECTNAME FROM TABLE WHERE NUM/2 = 100
改为
SELECTNAME FROM TABLE WHERE NUM = 100*2
5 SELECT * FROM TABLE 这样的全表扫描是没有意义的
6 索引并不是越多越好,索引会引起Update和INSERT的效率
7 选择最有效的表明顺序
FROM字句SQL解析器按照从右往左的顺序解析FROM字句中的表名,所以在含多个表的时候必须选择记录条数最少的表作为基础表(放在最后的表),SQL在处理表的时候会排序并合并他们,首先扫描最后一个表并对记录进行排序,然后扫描倒数第二个表,最后将第二个表的记录和第一个表中的合适的记录进行合并
索引
如果有3个以上的表进行连接查询,那么用交叉表(被其他表引用的表)作为基础表
8 WHERE字句的连接顺序
SQL采用自下而上的顺序解析SQL语句,因此表之间的连接要写在其他条件之前,并且能过滤掉大量数据的条件要写在最末尾
9 用TRUNCATE代替DELETE
10 用WHERE字句替换HAVING,能不用having那就尽量不要用having,因为having字句在检索出所有记录之后才会对结果集进行过滤,这个过滤包括排序、总计等等的工作,
但是如果能用where限制记录的条数,那么将大大减少这方面的开销
11 使用表的别名,因为可以减少甚至避免列歧义而引发的错误,减少解析时间
12 使用EXISTS代替IN
- 优化数据库
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- 优化数据库
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- 优化数据库
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- 数据库优化
- Python调用有道web端翻译,翻译中英文
- 湘潭oj_1250 Super Fast Fourier Transform
- 初次邂逅Hibernate之环境配置
- AFNetWorking(3.0)源码分析(一)——基本框架
- Java集合 asList的缺陷
- 数据库优化
- Java-类库-Guava-EventBus
- 微信支付
- 线段树练习4
- Spring Security(01)——初体验
- 获取teechart图表控件的x轴的起始位置和右边界(即终止位置)
- 早期创业,应该充分利用互联网产品和服务(从”皇包车”看一家全球中文车导服务平台如何选用ToB产品)
- 最小生成树
- linux截图工具ksnapshot