寫sql語句的經驗之談

1. 不論一個sql中涉及到多少表,每次都用兩個表(結果集)操作,得到新的結果后,再和下一個表(結果集)操作。

2. 避免在select f1,(select f2 from tableB ).... from tableA 這樣得到字段列。直接用tableA和tableB關聯得到A.f1,B.f2就可以了。

3、避免隱含的類型轉換

?

select?id?from?employee?where?emp_id='8'??(錯)

select?id?from?employee?where?emp_id=8?? ?(對)

emp_id是整數型,用'8'會默認啟動類型轉換,增加查詢的開銷。

4、盡量減少使用正則表達式,盡量不使用通配符。

5、使用關鍵字代替函數

?

select?id?from?employee?where?UPPER(dept)?like?'TECH_DB'??(錯)

select?id?from?employee?where?SUBSTR(dept,1,4)='TECH'?? ?(錯)

select?id?from?employee?where?dept?like?'TECH%'?? ? ? ??(對)

?

6、不要在字段上用轉換函數,盡量在常量上用

?

select?id?from?employee?

where?to_char(create_date,'yyyy-mm-dd')='2012-10-31'??(錯)

select?id?from?employee?

where?create_date=to_date('2012-10-31','yyyy-mm-dd') ??(對)

??

7、不使用聯接做查詢

?

select?id?from?employee?where?first_name || last_name?like?'Jo%'??(錯)

8、盡量避免前后都用通配符

?

select?id?from?employee?where?dept?like?'%TECH%'?(錯)

select?id?from?employee?where?dept?like?'TECH%'?(對)

9、判斷條件順序

?

select?id?from?employee?

where?creat_date-30>to_date('2012-10-31','yyyy-mm-dd') ??(錯)?

?

select?id?from?employee?

where?creat_date >to_date('2012-10-31','yyyy-mm-dd')+30???(對)

10、盡量使用exists而非in

當然這個也要根據記錄的情況來定用exists還是用in, 通常的情況是用exists

?

select?id?from?employee?where?salary?in?

(select?salary?from?emp_level where....) ??(錯)?

? ?

select?id?from?employee?where?salary?exists

(select?'X'?from?emp_level?where?....) ??(對)

11、使用not exists 而非not in,代碼和上面的類似。

12、減少查詢表的記錄數范圍

13、正確使用索引

索引可以提高速度,一般來說,選擇度越高,索引的效率越高。

14、索引類型

唯一索引,對于查詢用到的字段,盡可能使用唯一索引。

還有一些其他類型,如位圖索引,在性別字段,只有男女的字段上用。

15、在經常進行連接,但是沒有指定為外鍵的列上建立索引

16、在頻繁進行排序會分組的列上建立索引,如經常做group by 或 order by 操作的字段。

17、在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不建立索引。

如性別列上只有男,女兩個不同的值,就沒必要建立索引(或建立位圖索引)。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。

18、在值比較少的字段做order by時,翻頁會出現記錄紊亂問題,要帶上id字段一起做order by.

19、不要使用空字符串進行查詢

?

select?id?from?employee?where?emp_name?like?'%%'?(錯)

20、盡量對經常用作group by的關鍵字段做索引。

21、正確使用表關聯

利用外連接替換效率十分低下的not in運算,大大提高運行速度。

?

select?a.id?from?employee a?where?a.emp_no?not?in?

(select?emp_no?from?employee1?where?job ='SALE') ?(錯)

?

22、使用臨時表 ? ?

在必要的情況下,為減少讀取次數,可以使用經過索引的臨時表加快速度。

?

select?e.id?from?employee e ,dept d?where?

e.dept_id=d.id?and?e.empno>1000?order?by?e.id ??(錯)

??

select?id,empno?from?employee?into?temp_empl?

where?empno>1000?order?by?id

select?m.id?from?temp_emp1 m,dept d?where?m.empno=d.id?(對)

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537699.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微軟發布Azure Storage不可變存儲功能的正式版本

隨著新的不可變存儲功能的發布,blob特性在特定的保留期間內將是不可以擦除和修改的。該特性從今年6月份開始進行預覽使用,現在,微軟宣布它在所有公開Azure region中正式發布。\\微軟添加對不可變存儲的支持,以便于幫助客戶遵循像S…

html 表單控制器,c# – html表單發布到mvc控制器

將Html發布到MVC控制器>使用表單創建HTML頁面(不要忘記引用Jquery.js)User Name Password $(document).ready(function () {//get button by ID$(#btn1).submit(function () {//call a function with parameters$.ajax({url: rec/recieveData, //(rec) Controllers-name//(r…

紅米note5手機插u盤沒反應_認真分析下:榮耀智慧屏x1和紅米x50對比哪個好?用后一個月告訴大家實情...

這二款電視榮耀智慧屏x1和紅米x50區別還是有的哈,外觀和款式是不一樣的,不過家用都是可以的,看個人吧,我自己用的是榮耀智慧屏x1,款式是我喜歡的,多時尚的,整體質感不錯的,看上去很大…

用Excel函數提高效率

今天在計劃20某年項目采購各階段時間點,從合同計劃簽訂日期開始倒退。 規則如下: 項目采購申請----(1-2個工作日)---->項目立項----(1-2個工作日)--->采購小組成立-----(2-3個工作日&am…

python測試工具開發面試寶典3web抓取

2019獨角獸企業重金招聘Python工程師標準>>> 用requests輸出網站返回頭 輸出 https://china-testing.github.io/ 的返回頭 參考答案In [1]: import requestsIn [2]: url https://china-testing.github.io/In [3]: response requests.get(url)In [4]: response.req…

計算機網絡本直通線的制作方法,電腦網絡:教你一分鐘自制高質量網線(含水晶頭分類),不求人...

在文章開頭,我們首先來介紹一下制作水晶頭需要用到的工具——網線鉗。這不是多么高科技的東西,價格也不貴,普通用戶都能接受,從網上或是線下都能買到。網線水晶頭的制作及檢測方法,從來沒人寫過這么全我們主要用到網線…

Communications link failure,The last packet successfully received from the serve

最近做測試,發現Mysql 過一段時間會無法連接,導致數據庫數據不一至,極其郁悶。 使用Connector/J連接MySQL數據庫,程序運行較長時間后就會報以下錯誤: Communications link failure,The last packet succ…

sap crm button_正值SAP中國成立25周年之際,江蘇金來奇智能科技SAPB1項目正式啟動...

正值SAP中國成立25周年之際,江蘇金來奇智能科技的SAP項目于2020年11月02日正式啟動,代表著SAPB1在智能裝備行業又一成功的案例。江蘇金來奇隸屬于無錫金鑫集團股份有限公司,無錫金鑫集團股份有限公司坐落于風景秀麗的太湖之濱,位于…

安裝hadoop集群---resourcemanager和NameNode不在同一臺機器上

1、復制虛擬機,搞了5臺。 1:namenode 2:secondardNameNode,resourcemanager 3,4,5:DataNode 2、修改了網卡配置,連接上SecureCRT ---------root----用戶---------- 3、date查看了…

cf375D. Tree and Queries(莫隊)

題意 題目鏈接 給出一棵 n 個結點的樹,每個結點有一個顏色 c i 。 詢問 q 次,每次詢問以 v 結點為根的子樹中,出現次數 ≥k 的顏色有多少種。樹的根節點是1。 Sol 想到了主席樹和啟發式合并。。很顯然都不能做。 標算是dfs序上暴力莫隊。。甘…

it項目管理 pdf_IT項目管理的控制經驗

據調查,只有37%的IT項目在計劃時間內完成,42%的在預算內完成。IT項目成功率不高的根源在于IT項目管理是項系統工程,不僅需要項目經理個人具備一定的組織、決策、技術、業務、溝通能力,更需要運用多種手段對項目的時間、質量、成本…

安裝hadoop集群---resourcemanager和NameNode同一臺機器上

1、復制虛擬機,搞了5臺。 1:namenode,resourcemanager 2:secondardNameNode 3,4,5:DataNode 2、修改了網卡配置,連接上SecureCRT ---------root----用戶---------- 3、date查看了…

ps把圖摳到html里,ps摳圖教程:手把手教你如何用ps摳頭發絲

PS摳圖是現在常見的摳圖方法之一,色塊分明的圖是很好摳的,但是如果是需要摳出來的物體是細微凌亂的呢?就像頭發絲。PS如何摳頭發絲才能毫無P圖痕跡?如何摳頭發絲一類的圖像呢,本文介紹的是使用通道結合其余一些命令完成…

臻識科技用全智能相機,把智慧城市的交通/安防/工業制造做到極致

儼然,智慧城市已經是一個技術密集、資本密集、巨頭密集、關注度密集的大熱門領域。 從技術層面來看,智慧城市對當下熱門技術進行了綜合:Cloud、Big Data、AI、AR/VR、5G、IoT、Quantum Computing、Edge Computing、 Block Chain等&#xff0…

熱式氣體質量流量計檢定規程_寧夏熱式氣體質量流量計價位,玻璃管液位計怎么樣...

金湖中原儀表有限公司為您詳細解讀eJxKfc寧夏熱式氣體質量流量計價位的相關知識與詳情,氣體流量計是計量氣體流量的儀表。安拆正在管路中記載流過的氣體量。能夠丈量煤氣,空氣,氮氣,乙炔,,氫氣,…

自己從零安裝hadoop-HA集群

總體步驟 1、分配機器,各安裝什么軟件 2、每個節點設置時間一致,設置開機自動校驗時間。 3、每個節點修改主機名。 4、每個節點配置hosts。 5、每個節點關閉防火墻。 6、上傳JDK,配置JDK 7、創建hadoop用戶。 8、給hadoop用戶配置root…

高校學計算機研究生錄取分數排名,四川大學計算機學院2018年碩士研究生招生擬錄取名單及成績公示...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓四川大學計算機學院2018年碩士研究生招生擬錄取名單公示(全日制)姓名 擬錄取專業 總成績 初試成績 復試成績 備注白迪 計算機技術 75.3 353 160白婉玉 計算機技術 79.35 369 169.8曾春明 計算機技術 74.7 350 158.8陳澄 計算機技術…

藍牙基礎知識進階——Physical channel

藍牙基礎知識進階——Physical channel二、物理通道物理通道是piconet區分的標準,它是藍牙系統結構層次中的最底層了。Q1:物理通道有哪些類型物理通道通常可以分為四種類型:1、basicpiconet channel2、adaptedpiconet channel這兩種channel是…

mapreduce程序開發的一些總結

mapreduce在編程的時候,基本上一個固化的模式,沒有太多可靈活改變的地方,除了以下幾處: 1、輸入數據接口:InputFormat ---> FileInputFormat(文件類型數據讀取的通用抽象類) DBInputFormat (數據庫數據讀…

深度學習數據驅動_利用深度學習實現手繪數據可視化的生成

前一段時間,我開發了Sketchify, 該工具可以把任何以SVG為渲染技術的可視化轉化為手繪風格。(參考手繪風格的數據可視化實現 Sketchify)那么問題來了,很多的chart是以Canvas為渲染技術的,那要怎么辦&#xf…