這篇文章將為大家詳細講解有關怎么使用WITH AS提高性能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
如何使用WITH AS提高性能
1. 案例起因
公司門店應用程序每天都要出一份報表,用來統(tǒng)計所有商品當天的期初庫存數量、入庫數量、出庫數量
及當天的期末庫存數量。運行半年以后,這份報表運行越來越慢,到現在,每次運行該報表顯示當天數據時需要近20秒的時間。于是開發(fā)人員找到我,希望我看看,是不是可以使該報表運行的時間更短。
該報表就是一段SQL語句,主要由三部分組成,第一部分是計算每個商品的期初數量,第二部分是計算每個商品的當天發(fā)生(包括入庫和出庫的)數量,第三部分是計算每個商品的期末數量,也就是當天的余額。每個部分使用UNION ALL連接起來。
我看到該報表,第一個感覺就是這段SQL里的每個部分都要對表進行掃描,明顯成本過高。應該可以使用WITH AS進行改寫。
2. WITH AS的含義
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。
特別對于UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執(zhí)行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執(zhí)行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優(yōu)化器會自動將WITH AS短語所獲取的數據放入一個TEMP表里,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語里的數據放入一個全局臨時表里。很多查詢通過這種方法都可以提高速度。
關于“怎么使用WITH AS提高性能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
網頁標題:怎么使用WITHAS提高性能-創(chuàng)新互聯
網頁鏈接:http://www.chinadenli.net/article28/dhsdcp.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站改版、關鍵詞優(yōu)化、移動網站建設、建站公司、網站維護、網站設計公司
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯