1.索引问题
创建索引的标准语法:
CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;
创建唯一索引:
CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;
创建组合索引:
CREATE INDEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空间名;
创建反向键索引:
CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名;
2.建立索引的目的是加快对表中记录的查找或排序,并非越多越好,因为创建索引是要付出代价的:
3.编写 SQL 时就需要注意与索引相关的规则:
4.数据库的优化
减少多表连接数,尽量少的表进行连接
表连接时,尽量用主键进行接连或用唯一索引
表的查询多时,一定建立索引
根据查询条件建立索引,如果查询条件不止一个,使用组合索引
使用合适的索引,例如时间索引,哈希索引,聚簇索引
1.in(在where语句中规定多个值)替换or
2.union(合并多个select语句的结果集)替换or
3.Exists(sql返回结果为真)替换distinct(返回唯一不同的值也就是去重)
4.Not null 改为a>0或a>”” (检验数据是否为null比较耗费数据库性能)
5.尽量多使用commit
6.避免使用select *
7.A>2改为A>=3
8.X5400%不用前置%(进行了全表扫描)
9.UNION ALL操作符替代UNION
10.可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
11.用Where子句替换HAVING子句
12.避免在索引列上使用计算
总结:
1.对查询进行优化,要尽量避免全局扫描 首先应考虑在where以及order by设计的列上建立索引
2.应尽量避免在where子句中,对字段进行null值判断,否则会导致引擎放弃使用索引,而进行全表扫描
3.尽量避免,在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,就会导致引擎对全表进行扫描。
4.In 、not in 、like 尽量避免,都会进行全表查询。
5.部分查询修改的 复杂语句尽量查分开来生成一些临时表再进行 关联操作