關於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操做掛起等待。
    因此在高併發中,正確設計程序過程數據庫

相關文章
相關標籤/搜索