數據分析 | 8 min read
在資料這個領域摸爬滾打的人,取數往往是資料生涯的開始,而 SQL是取數的基本功。如果你已經有了資料庫知識基礎,那麼只需要做一些SQL學習和練習,很快就會掌握。如果你想接著提高sql水平,那就需要學習一些比較高級的用法和技巧了。大家普遍會遇到的一個問題就是訪問速度,如果你發現資料讀取的速度很慢,你可能需要考慮的問題就是:是不是SQL語句寫的有問題,需不需要改善SQL語句。 為什麼要做SQL最佳化 報表的核心是資料,資料集是否合理決定報表的質量。 1.每張報表都應該有一個主資料集,為了降低維護時的工作量,盡量將所有欄位置於主資料集,除非在某些情況下,不使用多源資料集會導致主資料集異常複雜。 2.在製作報表之前,盡量考慮到所有需要展示的資料欄位,在資料庫軟體中,合理編寫sql語句,大數據分析情況盡量對sql做最佳化,以及添加索引。 擁有高性能SQL查詢語句,能使查詢速度加快,報表展示速度得到較明顯的提升! 20條Tips方案,最佳化你的SQL查詢 1 SELECT子句中避免使用 「*」 當你想在SELECT子句中列出所有的COLUMN時,使用動態SQL列引用『*』是一個方便的方法。不幸的是,這是一個非常低效的方法。 實際上,ORACLE在解析的過程中, 會將「*」 依次轉換成所有的列名, 這個工作是通過查詢資料字典完成的, 這意味著將耗費更多的時間。 2 刪除重複記錄 最高效的刪除重複記錄方法 ( 因為使用了ROWID)DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO) 3 用TRUNCATE替代DELETE 當刪除表中的記錄時,在通常情況下,回滾段(rollback segments ) 用來存放可以被恢復的信息,如果你沒有COMMIT事務,ORACLE會將資料恢復到刪除之前的狀態(準確地說是恢復到執行刪除命令之前的狀況),而當運用TRUNCATE時,回滾段不再存放任何可被恢復的信息。當命令運行後,資料不能被恢復。因此很少的資源被調用,執行時間也會很短。 4 計算記錄條數 和一般的觀點相反, count(*) 比count(1)稍快 ,當然如果可以通過索引檢索,對索引列的計數仍舊是最快的。 例如COUNT(EMPNO)…
06-12-2019