目前先浅谈自我总结的数据库优化
1.物理主外键 中间表
对于架构师来说:
在实际开发过程中,设计表结构时,为了业务拓展和迭代开发,很少去建立物理主外键或中间表。比如A表 和B表,A表中放入B表B.id ,在写入数据时,A表中的外键(Bid)必须要插入B.id,不写不行,不能将其空着,且要求B中的id必须要有值。
在实际开发中不一定一上来就定完外键,为了方便后期开发者容易 ,一般使用逻辑主外键,就是通过人为来定这个字段存某个表的主键(并不真实存在的),不是真的在物理上定义外键
2.对于sql语句的优化
对于程序员来说:
(1)在早些时期,对sql语句的优化的要求比较多,比如 使用in 没有 inner join 效率高。
(2)还有在写查询语句时,禁止使用*去查询,因为只要用星号去查询就一定是全表扫描,效率很低。如果想要查询,要多少个字段就查多少个字段,不要怕麻烦,效率也比用星号高(特别是多表联查,写星号很忌讳)。
(3)避免全表扫描 比如 not in ,!= 只要是非的操作都是全表扫描
(4)如果到了必须要用in 不能用inner join的时候怎么办?这个时候采用exist关键字,exist效率比in。所有用 not in ,in 都可以用exist,not exist替代。
3.索引
但是索引是一把双刃剑,会提高查询效率,但会大幅度降低增删改效率。建立索引的底层原理就是建立一个二叉树(正确来说是b+树),如果要增删改会重新构建二叉树,会大大降低增删改效率。一般情况下 一个表索引顶多创建到两列上 主键一个索引(主键本来就是索引),另一个视业务而定
其余还有很多 先暂且谈到这里