三大范式:
第一范式(原子性):表中的每个列都是不可再分的最小数据单元
第二范式(单一性):属性完全依赖于主键
第三范式(直接依赖性):属性不依赖于其他非主键
sql语句优化:
- 尽量避免耗时操作。
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引 执行,耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序
2.一般来说,如果使用UNION ALL能满足要求的话, 务必使用UNION ALL
UNION因为会将各查询子集的记录做比较
-
避免在WHERE子句中使用in,not in,or 或者having。
可以使用 exist 和not exist代替 in和not in。
可以使用表链接代替 exist。
Having可以用where代替,如果无法代替可以分两步处理。 -
不要在建立的索引的数据列上进行下列操作:
(1)避免对索引字段进行计算操作
(2)避免在索引字段上使用not,<>,!=
(3)避免在索引列上使用IS NULL和IS NOT NULL
(4)避免在索引列上出现数据类型转换
(5)避免在索引字段上使用函数
例如:where trunc(create_date)=trunc(:date1)
虽然已对create_date 字段建了索引,但由于加了TRUNC,使得索引无法用上。此处正确的写法应该是
where create_date>=trunc(:date1) and create_date
(6)避免建立索引的列中使用空值。
- 少用LIKE
如何设计一个高并发的系统
-
数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引优化
-
使用缓存、尽量减少数据库IO
-
分布式数据库、分布式缓存
-
服务器的负载均衡