sql优化
来源:互联网 发布:java初级教程 编辑:程序博客网 时间:2024/06/06 19:20
(in和or的查询效率是等效的in最多只能写1000个,or无限制拼接)
1. SELECT子句中避免使用*,尽量应该根据业务需求按字段进行查询
举例:如果表中有个字段用的是clob或者是blob这种大数据字段的话,
他们的查询应该根据业务需要来进行指定字段的查询,切记勿直接用*
2.用TRUNCATE替代DELETE
TRUNCATE不记录日志,DELETE记录日志,所以TRUNCATE要快于DELETE
但是一旦TRUNCATE删除但就不能进行恢复,TRUNCATE是删除整张表的数据
不能加where条件。(在业务场景中我们更多的使用DELETE而不是TRUNCATE)
==================================================================
mysql,sqlserver中如果
id为自增类型,那么如果用TRUNCATE删除,则id字段再插入数据时从1开始,
如果delete删除的话,则从删除之前的id的值继续增长。
3.用UNION-ALL替换UNION,因为UNION-ALL不会过滤重复数据,所执行
效率要快于UNION,并且UNION可以自动排序,而UNION-ALL不会
4.(“=和<是使用索引的,对于>来说,如果是唯一索引则不使用,
如果是普通索引则可以使用”) >=优于>
举例: >及 <操作符(大于或小于操作符)
小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,
但有的情况下也需要对其进行优化。
如一个表有100万记录,一个数值型字段A,
A=0时,有30万条;
A=1时,有30万条;
A=2时,有39万条;
A=3时,有1万记录。
那么执行 A>2与A>=3的效果就有很大的区别了,因为 A>2时,
ORACLE会先找出为2的记录索引再进行比较,
而A>=3时ORACLE则直接找到=3的记录索引。
5.避免在索引列上使用计算和函数,这样索引就不能使用
举例:
低效:
SELECT… FROM DEPT WHERESAL * 12 > 25000;
高效:
SELECT… FROM DEPTWHERE SAL > 25000/12;
6.LIKE操作符(大数据的全文检索使用luncene)(solr)
LIKE操作符可以应用通配符查询,
里面的通配符组合可能达到几乎是任意的查询,
但是如果用得不好则会产生性能上的问题,
如LIKE '%5400%' 这种查询不会引用索引,
而LIKE 'X5400%' 则会引用范围索引。
一个实际例子:
查询营业编号 YY_BH LIKE '%5400%' 这个条件会产生全表扫描,
如果改成 YY_BH LIKE 'X5400%' OR YY_BH LIKE'B5400%'
则会利用 YY_BH 的索引进行两个范围的查询,性能肯定大大提高
7.减少与数据库的交互次数
- SQL优化
- SQL优化
- SQL优化
- SQL优化
- SQL优化
- sql优化
- sql优化
- Sql优化
- sql优化
- sql优化
- SQL 优化
- sql优化
- SQL优化
- SQL优化
- SQL优化
- SQL优化
- SQL优化
- SQL优化
- Android中的IPC方式
- HDU
- 【第4章】Python外壳:代码结构
- Opencv中ANN神经网络使用示例
- 【TensorFlow】第三课 卷积神经网络与图像应用
- sql优化
- java 正则杂记
- 深度优先搜索和广度优先搜索( DFS&BFS )
- 【Java编程】多线程之线程间的通信
- spring中的异步事件
- 多线程有几种实现方法?同步有几种实现方法?
- 集合的嵌套
- Android init 进程
- ACM暑假集训日记 17.8.16 树状数组