SQL优化
1.一般优化的技巧
a1.建议不用 "*" 代替所有列名
a2.删除所有数据用TRUNCATE代替DELETE
a3.用NOT EXISTS 代替 NOT IN
a4.用 EXISTS 代替 IN
a5.用EXISTS 代替DISTINCT
2.表连接的优化
表连接关系放在前面,过滤记录越多的条件子句应放置到后面
3.索引的使用
a1.索引分类
b1.逻辑分类:单列或组合索引
唯一或非唯一索引
基于函数索引
b2.物理分类
分区或非分区索引
B树索引
正常或反向键索引
位图索引
a2.B树索
语法:CREATE [UNIQUE] INDEX index_name on tablename(column_list)
[ TABLESPACE tablespace_name]
a3.唯一索引 : 适用在值唯一的字段如:身份证号,主键列自动加唯一索引
例:CREATE UNIQUE INDEX UQ_deptname on dept(deptname) --在部门表的部门名称上建唯一索引
a4.位图索引 : 适用在大量相同值,DML不频繁的列加。职务,工作类别,性别等
例:CREATE BITMAP INDEX BIT_job on emp(job) --在员工表的职务列上建位置索引
a5.反向键索引 : 适用于值连续的列上,类似序列的值的列
例:CREATE INDEX RE_salaryLevel on Level(salary) reverse
a6.组合索引 : 经常 作为组合条件的多个列
例:CREATE INDEX INDEX_STU_SEX ON STUDENT(STUNAME,SEX)
a7.函数索引 : 适用在经常适用函数的列上
索引原则
a1.频繁搜索的列
a2.经常排序,分组的列
a3.经常连接的列
a4.指定单独的表空间
不适合建立索引的原则
a1.表数据小
a2.仅包含几个不同值的列(如:性别)
a3.增删改数据表操作特别频繁
a4.增删改性能要求高于查询
4.管理索引
a1.表中导入数据后再创建索引,否则每次有中插入数据时都必须更新索引
a2.在适当的表和字段上创建索引。如果经常检索的数据少于表中的15%则需要创建索引
a3.限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大