数据库优化最关键的因素在于IO,因为操作内存是是很快的,但是读写磁盘文件的速度是很慢的,优化SQL最关键的在减少IO的读取,这就从逻辑优化和物理优化两方面
物理优化: 1. oracle 的运行环境 2. 合理配置Oracle 实例的参数 3. 建立合适的索引 4.将索引数据和表数据分开在不同的表空间上 5. 建立表分区,将数据分开存在不同的分区上
索引: 建立索引就跟字典的目录一样,有了目录,查询某个字的速度就快一些,不用全部遍历所有的字。数据库在执行一条SQL的时候,默认方式是根据搜索条件进行全表扫描,如果我们队某一列添加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数。
什么时候该增加索引? 1. 如果每次都需要取到表里所有记录,增加索引没意义,对于非唯一性字段,例如性别男女,对于记录比较少的数据量,增加索引不仅不会增加查询速度反而浪费了存储空间,因为索引是需要存储空间的,任何update/delete/insert的执行,索引就会计算更新。
2. select distinct dept_charger, first_value(dept_name) over (partition by dept_charger order by dept_name asc) dept_name from dpt where dept_id is not null and start with dept_id in ('_01') connect by prior dept_id = parent_id
以上 代码的意思是 按照部门id 由第一层级逐层递增,展示所有数据,然后 按照部门负责人分组后按照部门名称降序展示,取第一个分组的部门名称展示,最后再去重
3. 逻辑上的优化
1. 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾号建10个表,这样对性能有一定的作用
2. SQL语句使用占位符