关于SQL的优化

在大数据并发处理中,很容易发生系统hang机。
此处应该考虑两点,系统锁死,或者IO流异常
1.IO流异常
    在系统查询大量数据的时候,咱们一般采用索引的方式来优化系统查询。而索引在查询方面会有瓶颈。
        什么是索引:
           索引是数据库中一种可选的数据结构,它一般与表或簇相关。用户能够在表的一列或数列上创建索引,一般以提升在此表上执行 SQL 语句的性能。就像本文档的索引能够帮助读者快速定位所需信息同样,Oracle 的索引提供了更为迅速地访问表数据的方式。正确地使用索引可以显著的减小磁盘 I/O。
          通俗的讲就是数据的分类后的目录。在此处咱们查询数据的时候经过查询索引可以很快的找到数据所在,并返回咱们想要的数据。这就是索引的做用所在,在海量的数据库里查询少许的数据的时候索引是个不错的选择。可是 当咱们查询的数据量过大的时候,就会产生性能的瓶颈。
             例如:当我在100万条数据中查询10万条数据的时候,数据库会去大量的遍历索引,会致使整个数据库宕机中止响应。此时使用索引还不如全表遍历查询更快。此时索引就会失效。由于你每次查询我都得去查询索引找到对应的信息,而全表查询我十个中挑一个记录。性能耗费以及所用时间可能就已经不相上下了。当我查询的数据量过大好比100万查询50万数据。此时你在查索引 可能就是得不偿失了。
              注:这个时候查询索引会致使SQL卡机,查询索引,索引此时并不会响应。也就是说 当你查询数据和全部数据所达必定比例的时候会致使索引失效。Oracle官方数据给出是30%实际应用中发现超过10%基本就失效
       索引的失效:
              索引的失效并不是在查询大量数据的同时会致使这个问题,当大量的Insert/update对表进行操做的时候,也会致使索引失效。大量的更新插入操做会致使整个索引结构的变更。一旦一个数据改变,而且改变的列比较多,可能会引发好几个索引跟着改变
        索引的高效查询都是基于索引的未失效前提。
        此处提出SQL优化几点意见。
        1.书写SQL的同时 保证SQL的前倾性。SQL过滤是根据where条件后的条件来过滤的,而Oracle的过滤机理则和where条件的放置顺序有关,咱们将可以肯定几率的条件放在第一位,这样咱们找到的几率就会变高,以此类推。第二位第三位条件。
        2.索引建立最好是不常常变更的列,若是常常变更,则须要索引重建
2.系统锁死
    程序设计中致使系统锁死,无非就是加锁后其余线程等待资源致使系统锁死,或者执行update/insert 未提交,致使其余update/insert操做挂起等待。
    因此在高并发中,正确设计程序过程数据库

相关文章
相关标签/搜索