关于SQL的优化

怎甘沉沦 提交于 2020-01-10 12:07:25

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

在大数据并发处理中,很容易发生系统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操作挂起等待。
    所以在高并发中,正确设计程序过程

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!