
虚拟主机域名注册-常见问题 → 数据库问题 → 数据库问题 | |||||||
SQL数据库的优化小技巧
1、不要让oracle做得太多 1)避免复杂的多表关联,会导致很难优化。 2)避免使用‘*’,输入要查询的列名,‘*’会转变成列名,通过查询数据字典来完成,耗时 3)避免使用耗费资源的操作如 DISTINCT, UNION, MINUS, INSERTSECT, ORDER BY 解决方法:使用EXISTS 替换 DISTINCT, 使用UNIONALL 替换 UNION 2、给优化器更明确的命令 1)自动选择索引,如果是组合索引,只有在第一个列被where子句引用的时候,优化器才会选择该索引。 2)避免在索引上使用函数。 3)避免使用前置通配符 4)避免在索引列上使用not 5)避免在索引列上使用is null, is not null 6)避免出现索引列自动转换。 7)在查询时尽量少用格式转换 3、减少访问次数 1)减少数据库的访问次数 2)使用DECODE来减少处理时间。 3)减少对表的查询 4、细节上的影响 1)where子句中的连接顺序 oracle自下而上解析where子句,返回行数少的表放后面。 2)where子句中最好不要使用函数表达式,如果要使用的话,最好统一使用相同的函数或者表达式。 3)任何在order by中的非索引项,都会降低查询速度。可以为非索引项,建立新的索引。避免在order by中使用表达式 4)对于联接列“||”,oracle是不会使用索引的 5)“%”在词首出现,oracle不会使用索引 6)用where子句代替having子句,having只会在检索出所有的记录后,才会对记录进行过滤。where>group>having 7)用not exists代替not in。NOT IN子句将执行一个内部的排序与合并。NOT EXISTS可以高效的利用索引。 5、用索引提高效率。大型表中使用索引特别有效率。当然索引也是有代价的,需要空间来存储,记录被修改的时候,索引需要 维护。 1)避免在索引上使用计算 2)用>=代替> 3)通过>=和<=,避免使用not和<> 6、如果有其他办法不要使用子查询 7、外部连接(+)代替NOT IN 8、尽量多使用COMMIT;使用commit来释放事务所占的资源(回滚段上用于恢复数据的信息、被程序语句获得的锁、redo log buffer中的空间,oracle为了管理上述资源的内部花费)。 9、用truncate 代替 delete。delete会存放被删除的消息,以便回滚,truncate不会保存被删除的数据。 10、计算记录条数,count(*)比count(1)快,通过索引检索,对索引列的计数是最快的。 11、字符型字段的引号,如果一个字段是char型,而且创建有索引,但在where条件中忘记加引号,就不会用到索引。 12、优化export和import,使用比较大的BUFFER.本文由—名站互联(http://idcmz.com)提供。 网站关键词: 香港vps | vps主机 | 云主机 | 服务器租用 | 虚拟主机 |
|
|||||||
>> 相关文章 | |||||||
没有相关文章。 |