数据库优化SQL
Posted 来陪朕侍寝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库优化SQL相关的知识,希望对你有一定的参考价值。
sql优化规则:
1.对于查询,尽量不要使用全表扫描,尽量在where子句以及order by所对应的字段建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。
最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库.备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL
一些限制索引的写法如下:
①使用不等运算符(<> !=)
②使用IS NULL或者is notnull做判断。比如NVL等
③使用函数
select t.* from eb_bill_app t where substr(t.apply_id,1,6) =‘201805‘
④比较不匹配的数据类型.本来该类型为char,却使用int比较,oracle自动调用to_number函数,导致不使用索引(字符型字段为数字时在where条件里不添加引号)。
⑤like "%_" 百分号在前。
⑥not in ,not exist.
⑦单独引用复合索引里非第一位置的索引列
⑧B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走。联合索引 is not null 只要在建立的索引列(不分先后)都会走。
⑨应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
3.select语句中避免使用*,因为oracle在解析过程中会将*转换为所有的列名。
4.尽量多使用commit,,在事务控制允许的范围内,commit有利于释放资源。
5.使用表别名,减少由column引起的歧义。
6.避免使用having
7.对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。
8.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
9.如果数据量过大,优先考虑表分区
待补充。。。
以上是关于数据库优化SQL的主要内容,如果未能解决你的问题,请参考以下文章