重点(数据库优化)

数据库的几个版本: sqlserver 2000, 2005 ,2008 ,2012,2014(云计算)

Mysql  Oracle DB2
 
                             数据库优化
    1:增加索引  
    2:分表  两种
    3:数据库的垂直分离(发布和订阅)
    4:Nosql
    5:读写分离(数据库的IO资源读写竞争非常大)
 
1.一个表的数据量非常大,导致查询慢
      解决方案:
      a.增加索引
      b.分表
      c.数据库的垂直分离
      d.Nosql(非关系型数据库) --MogoDB , Redis
 
      a:增加索引: 
    1:聚集索引: 
     特点:任何一个表至少有且一个聚集索引,一般聚集索引自动创建在主键上(具有主键的一切特征) ,可以由一个或则多个组合建索引,标记当前表数据的物理位置排列
    2:非聚集索引
     特点:一个表可以有多个非聚集索引,一般创建在where order by , group by 的字段中 可以由一个或则多个组合创建索引,标记当前表数据的逻辑位置排列,相同的值数据会放在同一个索引页中
    3:聚集索引缺点:如果一个加了索引的字段有频繁改变,则会导致索引页的重新排列    而重新排需要消耗性能 
 
总结:所以当数据量大的时候 或则加索引的字段值变动不频繁的时候我们就会用非聚集索引
 
 
b:分表的几种方法:
      1:求余法:Hash() 缺点:当现有的表存满的时候,不能立即加
      2:路由表(索引表)法:确定一个表的字段和开始结束时间段,在现有表存满的时候那么就在那个表的字段新增一个表,新确定时间段,
        例如我们在登qq查看历史记录的时候我们就可以通过lou
 
 
c:确定主DB(负责写入数据),从DB(负责读数据)
       1:主DB是以增量脚本的形式发送给db执行
       2:订阅发布有两种形式: 1:从db定时轮询主DB是否有数据需要同步,主DB有数据更新的时候,才会生成脚本发送给从DB(推荐 性能好),就是观察者模式,使用委托来进行实现的 
       3:MSSQLSERVER实现订阅发布功能的步骤:
           a:检查主DB的一个文件夹是否有读写权限,如果没有则自己增加Everyone的读写权限 
                    地址网上百度
           b:直接看视频   注意点:需要开启代理服务
   
   
 
2.数据库的IO资源的读写竞争非常大:
       解决方案: 读写分离
       写:Insert  Update Delete
       读:Select
     
注意:
      1:数据类型的分类: 
          a:关系型数据库   特点:做insert  update  delete的时候会开启隐式事务来维持数据的完整性  (隐式事务:数据库自己开的事务  显示事务:程序员自己开的事务)   缺点:消耗性能 并且要写日志.ldf  
 
      2:Nosql  特点: a:key-value存储数据的  b:没有事务去维持数据的完整性   优势:查询速度快  数据占用磁盘的控件小,占用量通常是关系型数据库的几十分之一
 
 session储存数据不好的原因:iis中由于有进程回收机制,系统繁忙的话Session会丢失
 解决session数据不稳定的弊端的方法
 利用cookie和cache创建一个Session ,解决session储存数据不稳定的弊端
 补充:将数据储存在进程外或则进程内session中都是不稳定的,
 解决方法:利用cookie和cache中结合创建一个session ()
 原理:将cache的建当作sessionid 储存在cookie集合中
 将数据储存在缓存中,就像储存在session池中
            
   
       

 

posted on 2015-05-10 17:40  阿兴的平凡世界  阅读(107)  评论(0)    收藏  举报

导航