1.规则优化, 表现为sql 语句优化
2. 物理优化, 表现为 访问路径, 硬盘, 内存等,, 在已经创建了索引和排序文件的情况下, 需要考虑如何实现策略
3. 代价评估优化, 对多个候选策略 进行评估, 选择代价最小的一个,
一般来说: 查询的总代价 为 cpu 和 I/O代价之和. ()输入输出) 然后考虑查询量
1: 内连接, 外联,自连接
内连接 产生记录为M*N,
笛卡尔积: m*n条记录,重复的也计算, select* from T1,T2, 若指定连接字段,为子查询, a 每一行与b每一行比较,相同的记录产出,重复 的也产出. 和内连接 是一样的产出记录, 等价于 using(fild) 用法,只是
自然连接: 在相同列上有相同值 的记录挑选出来,重复列去除, 将选择的结果尽量提前执行.
深入可以看sql执行计划
2 分表优化:
将大表 分为若干个小表: 1永久分裂, 设计时考虑, 二: 临时分裂; 语法控制. 可以放在磁盘 或不同逻辑设备上
3.减少嵌套层数, 会成几何级的降低效率
4.利用视图: 从多个基本表或视图中导出的表,数据库只存定义,不存数据 . 为虚拟表: 可以crud 随真实数据而改变 优点: 提供某些数据的安全性, 异常数据复杂性, 简化查询, 特殊查询 sql: create view <viewName> {[col1, col2, col3 ]} as<select 语句> +上 [with chech option] : 表示在对视图修改,删除,插入, 仍要保证 selec语句的表达式, 注意: 对视图更新,删除时,也会更改基本表,这种情况下也就在视图只关联一个表时, 但是大部分视图都不可以更新: 1 带有group by, 聚集函数.多表关联; 来自表达式或常量,许删不许改.
5. gront:授权, revoke: 撤销授权 view update query .....操作的权限
6. 索引优化: 索引占用存储空间和处理,并不是越多越好, 不必要的索引会是系统变慢, 难维护(更新难), 只读取 ,不更新的话还好,
如果创建了主键,那么自动以主键升序 创建索引,
建立 unique 索引事,列值唯一,cluster为簇索引: 留待研究
7 注意 对null 值的处理
8. sql为原子性操作, commit 之前, 出现异常则,一系列操作回滚,无效, 也可以rollback, 回复, 但是如果commi成功那么久数据就永久性更改了. 即数据库事务
8, distinct (fild): 明显的有区别的, 去除重复
9 where (filed between 3 and 5) exists: 检查某个属性是否有 元组,, 有返回记录返回true,无返回false _ 代表一个字符,%通配任意个字符, not exists 相反
10 count max min avg sum
11: where having count(column)>5
12 集合操作符: union 并(联合) intersect 交(交叉,横断 横切) 跟sql 语句 except 除(把.... 除外) 后面跟sql语句