中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Java開發者編寫SQL語句時常見的10種錯誤(1)
來源:易賢網 閱讀:1620 次 日期:2015-08-31 15:41:36
溫馨提示:易賢網小編為您整理了“Java開發者編寫SQL語句時常見的10種錯誤(1)”,方便廣大網友查閱!

Java開發者對于面向對象編程思維與命令行編程思維的協調程度,取決于他們如下幾種能力的水平:

技巧(任何人都可以編寫命令行形式的代碼)

教條(有的人使用“模式 - 模式”的方式,即模式無處不在,并以名字作為標識)

情緒狀況(在初期,真正面向對象形式的代碼比起命令式代碼會更加難懂。)

但是,當Java開發人員編寫SQL語句時,一切都變得不同了。SQL是一種說明式語言,與面向對象思想和命令式思想無關。在SQL語言中,查詢非常容易表達。但它也不是那么容易以最佳或最正確地方式編寫出來。開發人員不僅需要重新思考自己的編程模式,還需要從集合論的角度進行深入思考。

以下是Java開發人員使JDBC或jOOQ編寫SQL語句時,幾種常見的錯誤(排名不分先后)

1.忘記了NULL

誤解NULL的含義可能是Java開發人員編寫SQL最常犯的錯誤。這有可能是因為NULL也被稱為UNKNOWN,但也有其他的原因。當然如果它只被叫做UNKNOWN,會更容易理解一些。另一個原因是,JDBC在獲取數據,或綁定變量時,SQL中的NULL被映射到Java中的null。這可能會導致人們認為類似Java中null==null的情況,SQL中也存在NULL= NULL。

一個更離奇的誤解NULL的例子是,當NULL謂詞用于行值表達式時。

另一個微妙的問題產生與對NOTIn 反連接中NULL含義的誤解。

解決辦法

不斷的訓練自己。要時刻明確NULL的含義,每次你寫SQL時,都要考慮:

對于NULL來說謂詞是否正確?

NULL是否影響該函數的結果?

2.在Java內存中處理數據

一些Java開發者十分了解SQL特性。偶爾JOIN,零散的UNION,沒什么問題。但如果遇到視窗功能,結果集分組等情況又怎么樣呢?很多Java開發人員會把SQL數據加載到內存,把數據轉換成一些適合的集合類型,以十分冗長的循環結構在集合上執行惱人數學運算(至少在Java 8改進容器之前是這樣的)。

但一些SQL數據庫除了支持SQL標準外,還支持先進的OLAP特性,執行效率更好,且更容易編寫。一個非標準的例子就是甲骨文的MODEL子句。只是讓數據庫進行數據處理過程,將最終獲取的結果加載到Java內存中。因為一些非常聰明的人已經優化了這些昂貴的產品。所以,事實上,通過向OLAP數據庫上進行遷移,您將得到兩個好處:

簡潔。它可能使得在SQL中編寫正確代碼會比在Java中相對容易

性能。該數據庫將可能比你的算法要快。更重要的是,你不必再通過網絡傳輸數百萬條記錄。

解決辦法

每次你在Java中實現以數據為中心的算法時,要試著問問自己:有沒有辦法讓數據庫執行這些工作,而只把結果交付給我?

3.盡量使用UNION,而不是UNION ALL

相對于UNION,UNION ALL需要額外的關鍵字顯得相形見絀。如果在SQL標準已定義如下支持,那將會好很多:

UNION(允許重復)

UNION DISTINCT(去掉重復)

一般很少需要去除重復(有時去重甚至是錯誤的),而且對于具有很多列的大結果集,它往往很慢,因為這兩個子查詢需要排序,每個元組都需要與隨后的元組進行比較。

需要注意的是,即使SQL標準指定了INTERSECTALL和EXCEPTALL,但幾乎沒有任何數據庫實現這些用處不大的操作。

解決辦法

你每次寫到UNION時,要考慮下你是否實際上想寫的是UNIONALL。

4.使用JDBC分頁功能將大量結果分頁

大多數數據庫都支持通過LIMIT.. OFFSET,TOP .. START AT、OFFSET.. FETCH等子句以某種方式對結果進行分頁。在沒有對這些子句的支持下,但仍然有ROWNUM(Oracle)或ROW_NUMBER()OVER()(DB2,SQL Server 2008和更低版本),這比在內存中分頁要快得多。而且這對于大數據集更是明顯。

解決辦法

只要使用那些子句或工具(如jOOQ),可以為你模擬上述分頁子句。

5.將Java內存中實現連接

從SQL的發展的初期,一些開發商在面對SQL連接時仍然有一種不安的感覺。一直存在著一種固有的恐懼---JOIN速度緩慢。如果基于成本的優化器選擇執行嵌套循環,創建一個連接表源之前,加載完整表到數據庫內存,那速度確實十分緩慢。但很這少發生。通過適當的謂詞,約束和索引,MERGEJOIN和 HASHJOIN操作是非常快的。這與正確的元數據相關(我不用再舉Tom Kyte的例子了)。然而,也有仍然可能有不少Java開發人要會從單獨的查詢中加載兩個表到map容器中,在java內存中以某種方式進行連接操作。

解決辦法

如果你從多個步驟的多個表中進行了SELECT操作,那要慎重考慮一下是否可以在一條語句中表達你所需要的查詢功能。

6.使用DISTINCT或UNION從一個笛卡爾積中刪除重復

冗長連接的存在,會導致SQL語句中起作用的關系顯得十分松散。具體地,如果涉及到多列外鍵關系,很有可能忘記在JOINON子句上添加謂詞。這可能會導致重復的記錄,但也許只在特殊情況下。然后一些開發者可能會選擇使用DISTINCT再次刪除這些重復記錄。這種錯誤有三種危害:

可能治標不治本。甚至在某些邊緣情況下,標都治不了

這在有很多列的大結果集上會十分的緩慢。DISTINCT會執行ORDER BY操作來刪除重復。

這在大型笛卡爾積中也十分的緩慢,因為這樣做仍然會導致在內存中加載大量數據。

解決辦法

作為一個經驗法則,當你得到不想要的重復結果時,應該首先檢查你的連接謂詞。因為有可能是在某個地方存在著一個不易察覺的笛卡爾積。

7.不使用MERGE語句

嚴格意義上講,這不是一個真正的錯誤,可能只是對于功能強大的MERGE語句缺乏足夠的認知或存在著某種恐懼而已。有些數據庫包括其他形式的UPSERT 語句,如MySQL的ONDUPLICATE KEY UPDATE子句。但MERGE真的十分強大,最重要的是在數據庫中,它在很大程度上擴展了SQL標準,如SQL Server。

解決辦法

如果你通過鏈接INSERT和UPDATE或鏈接SELECT... FOR UPDATE來實現UPSERTING,那么你要多想一想。拋開與運行條件的風險,你也許可以使用一個簡單的MERGE語句來達到目的。

8.使用了聚合函數,而不是窗體功能

引入窗函數之前,使用GROUPBY子句與投影聚合函數是匯總數據的唯一方式。這在大部分情況下都十分有效,如果聚集后的數據需要由常規的數據進行補充,該分組的查詢可以置于連接子查詢中。

但是,SQL:2003定義了窗口功能,目前很多主流的數據庫廠商也紛紛實現了窗口功能。窗口功能可以聚集結果集中未被分組的數據。事實上,每個窗口的功能支持自身獨立的PARTITIONBY子句,這對于報表類應用是一個非常有用的工具。

使用窗口功能將:

導致更多的可讀性SQL(減少子查詢中非專用GROUP BY子句的存在)

提高性能,作為一個RDBMS很可能更容易優化其窗口功能。

解決辦法

當你在一個子查詢寫一個GROUPBY子句時,仔細想想這是否能用一個窗口函數來完成。

9.使用內存排序法進行間接排序

在SQLORDER BY子句支持多種類型的表達式,包括CASE語句,這對間接排序非常有用。你應該永遠可能在Java內存中對數據進行排序,因為你認為:

SQL排序太慢

SQL排序不能做到這一點

解決辦法

如果你在內存中對任何SQL數據進行排序,請仔細想想,你是否能把排序遷移至數據庫中。這和將分頁遷移至數據庫中的原因一樣。

10 一個接一個的插入大量的記錄

JDBC包含了批處理,而且你應該使用它。面對成千上萬的記錄,切勿為每一條記錄都創建一個新的PreparedStatement來進行插入操作。如果你要將所有記錄都插入到同一個表,使用單一的SQL語句和多個綁定值集合建立一個批處理的INSERT語句。根據您的數據庫和數據庫配置,您可能需要在一定數量的插入的記錄后進行提交,為了保持UNDO日志不過分龐大。

解決辦法

始終批量插入大型數據集。

更多信息請查看IT技術專欄

更多信息請查看數據庫
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
日韩一级网站| 国产在线国偷精品产拍免费yy| 亚洲美女视频在线免费观看| 日韩午夜av电影| 亚洲在线观看视频| 久久在线免费| 欧美日韩一区二区视频在线观看| 国产精品久久一区二区三区| 黄色日韩在线| 在线视频欧美日韩| 蜜乳av另类精品一区二区| 欧美午夜精品久久久久久孕妇| 国一区二区在线观看| 一本色道精品久久一区二区三区 | 国产欧美日韩免费| 亚洲三级电影全部在线观看高清| 午夜日韩激情| 欧美人与性动交a欧美精品| 国产午夜精品理论片a级大结局 | 精品99一区二区| 一区二区三区四区蜜桃| 久久久久久久网| 国产精品日韩欧美大师| 亚洲精品久久久久久一区二区| 欧美一级理论性理论a| 欧美日韩精品一本二本三本| 在线观看亚洲一区| 午夜一区不卡| 欧美日韩久久精品| 91久久精品国产91久久性色| 久久精品国产999大香线蕉| 国产精品久久久久久五月尺| 亚洲美女毛片| 欧美国产在线电影| 亚洲狠狠丁香婷婷综合久久久| 久久国产夜色精品鲁鲁99| 国产精品欧美日韩一区二区| 一区二区三区av| 欧美精品一区二区三区蜜臀| 亚洲国产精品久久久久秋霞蜜臀| 久久国产精品免费一区| 国产欧美一区二区三区在线老狼| 国产一区二区三区在线观看视频 | 欧美日韩精品欧美日韩精品一| 国内成人精品一区| 亚洲高清123| 亚洲国产精品第一区二区| 欧美日韩午夜在线视频| 欧美网站在线| 欧美日韩成人网| 男女视频一区二区| 久久久久.com| 国产一区导航| 亚洲黄色一区| 亚洲三级免费观看| 亚洲免费网站| 一区二区三区欧美在线| 久久国产精品一区二区三区四区| 午夜欧美大片免费观看| 一区二区欧美日韩视频| 亚洲精品美女在线观看播放| 亚洲高清影视| 久久一区精品| 欧美一区二区国产| 亚洲一区二区少妇| 一本久久综合| 夜夜嗨av一区二区三区四区| 亚洲欧美国产另类| 欧美在线亚洲在线| 国产精品久久久久久久久免费樱桃| 欧美性感一类影片在线播放| 国产区亚洲区欧美区| 国产精品高精视频免费| 国产午夜精品一区理论片飘花| 欧美日本韩国一区| 久久久久国产免费免费| 久久精品国产成人| 中文久久乱码一区二区| 欧美一区二区三区在线| 欧美亚一区二区| 国产精品成人一区二区三区吃奶| 国产精品豆花视频| 影音先锋在线一区| 欧美一区二区三区日韩视频| 欧美一区二区三区视频在线| 欧美日韩一区在线播放| 亚洲电影免费| 欧美男人的天堂| 亚洲一区自拍| 欧美激情欧美激情在线五月| 一区二区亚洲欧洲国产日韩| 妖精成人www高清在线观看| 亚洲精选视频在线| 欧美一区二区久久久| 欧美精品亚洲| 欧美日韩免费观看一区| 亚洲男女自偷自拍图片另类| 樱桃成人精品视频在线播放| 欧美午夜不卡视频| 久久精品日产第一区二区| 欧美电影免费| 一区二区三区自拍| 欧美午夜精品一区| 美女精品国产| 亚洲色图综合久久| 亚洲激情视频| 国内精品久久久久影院色| 欧美性大战xxxxx久久久| 理论片一区二区在线| 亚洲欧美日韩中文视频| 亚洲激情综合| 黄色日韩精品| 国产精品亚洲综合久久| 欧美日韩一区二区免费在线观看 | 国产精品一香蕉国产线看观看 | 久久超碰97中文字幕| 国产精品99久久久久久久久 | 久久久亚洲国产天美传媒修理工| 一区二区三区.www| 亚洲人成小说网站色在线| 国内精品免费在线观看| 国产精品久久久久aaaa| 欧美另类一区二区三区| 免费看成人av| 久久天天躁狠狠躁夜夜av| 欧美亚洲一级片| 亚洲免费在线观看| 国产精品99久久久久久www| 亚洲级视频在线观看免费1级| 激情视频一区| 国产在线高清精品| 国产视频不卡| 国产一二三精品| 国产日韩欧美在线播放| 国产免费一区二区三区香蕉精| 国产精品xnxxcom| 欧美亚洲不卡| 国产精品美女久久久久av超清| 国产精品播放| 国产精品区一区二区三区| 国产精品久久久久久久久| 国产精品久久久| 国产欧美一区二区视频| 国产视频久久| 激情成人中文字幕| 在线观看视频一区二区| 亚洲电影免费在线 | 在线看国产一区| 在线观看成人网| 亚洲国产精品久久91精品| 亚洲人久久久| 亚洲调教视频在线观看| 午夜精品短视频| 久久精品夜色噜噜亚洲a∨| 欧美在线影院| 久久中文字幕一区二区三区| 欧美成年人网站| 欧美日韩一区在线观看视频| 国产精品久久久久久久久借妻 | 伊人久久大香线蕉综合热线| 狠狠爱综合网| 国产一区二区成人久久免费影院| 国内精品久久久| 亚洲国产成人精品久久| 亚洲美女视频网| 午夜亚洲福利| 美女视频黄免费的久久| 欧美精品一区二区三| 国产精品美女一区二区| 国产在线拍偷自揄拍精品| 亚洲丶国产丶欧美一区二区三区 | 在线观看欧美日韩国产| 亚洲精品视频免费| 性感少妇一区| 欧美激情精品久久久久久黑人| 欧美视频三区在线播放| 国产在线视频不卡二| 亚洲精品久久久久久久久久久久久| 亚洲手机视频| 老鸭窝毛片一区二区三区 | 亚洲电影下载| 欧美一级夜夜爽| 美女国内精品自产拍在线播放| 欧美国产亚洲视频| 国产精品一二三视频| 亚洲高清av在线| 亚洲欧美日韩一区二区| 久久综合伊人| 国产精品色一区二区三区| 在线观看的日韩av| 一区二区三区精品视频在线观看| 午夜日韩激情| 欧美日本一区二区三区| 国产亚洲日本欧美韩国| 亚洲精品乱码久久久久久按摩观| 欧美一区永久视频免费观看| 欧美日韩天堂| 亚洲国产另类 国产精品国产免费| 亚洲影院色在线观看免费| 美女露胸一区二区三区|