第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不使用SELECT*的原因是什么?

不使用SELECT*的原因是什么?

九州編程 2019-06-03 13:44:23
不使用SELECT*的原因是什么?我見過許多人聲稱您應(yīng)該在SELECT查詢中具體地命名您想要的每一列。假設(shè)我無論如何都要使用所有的列,我為什么不使用SELECT *?即使考慮到這個問題*SQLQuery-從視圖中選擇*或選擇col1、col2、…柯倫*,我不認為這是一個確切的重復(fù),因為我是從一個稍微不同的角度來處理這個問題。我們的原則之一是在時機成熟之前不進行優(yōu)化。考慮到這一點,它看起來就像使用SELECT *應(yīng)該是首選方法,直到它被證明是一個資源問題,或者模式基本上是一成不變的。正如我們所知,在開發(fā)完全完成之前,這是不可能發(fā)生的。也就是說,是否有一個壓倒一切的問題不能使用?SELECT *?
查看完整描述

4 回答

?
肥皂起泡泡

TA貢獻1829條經(jīng)驗 獲得超6個贊

“不過早地優(yōu)化”的引語的實質(zhì)是使用簡單而直接的代碼和然后使用分析器指出熱點,然后您可以優(yōu)化這些熱點以提高效率。

當您使用SELECT*時,您將無法進行概要分析,因此您并不是在編寫清晰而直接的代碼,而且您違背了引用的精神。select *是一種反模式。


因此,選擇列并不是一個過早的優(yōu)化。我頭上有幾件事.

  1. 如果在SQL語句中指定列,則如果從表中刪除該列并執(zhí)行查詢,則SQL執(zhí)行引擎將出錯。
  2. 您可以更容易地掃描使用該列的代碼。
  3. 您應(yīng)該始終編寫查詢,以獲取最少的信息。
  4. 正如其他人提到的,如果您使用序號列訪問,則永遠不要使用SELECT*
  5. 如果SQL語句連接表,則選擇*為聯(lián)接中所有表的所有列提供

其推論是使用select * ...

  1. 應(yīng)用程序使用的列是不透明的。
  2. DBA及其查詢分析器無法幫助您的應(yīng)用程序性能低下
  3. 當發(fā)生更改時,代碼更加脆弱。
  4. 您的數(shù)據(jù)庫和網(wǎng)絡(luò)正在遭受損失,因為它們帶來了太多的數(shù)據(jù)(I/O)。
  5. 數(shù)據(jù)庫引擎優(yōu)化是最小的,因為您將帶回來所有數(shù)據(jù),而不管(邏輯)。

編寫正確的sql與編寫正確的sql一樣容易。Select *..因此,真正懶惰的人編寫適當?shù)腟QL,因為他們不想重新查看代碼,并試圖記住他們在執(zhí)行代碼時所做的事情。他們不想向DBA解釋每一段代碼。他們不想向客戶解釋為什么應(yīng)用程序像狗一樣運行。


查看完整回答
反對 回復(fù) 2019-06-03
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

如果您的代碼依賴于以特定順序排列的列,則當表發(fā)生更改時,您的代碼將中斷。此外,當選擇*時,可能會從表中獲取太多信息,特別是在表中有二進制字段的情況下。

僅僅因為您現(xiàn)在正在使用所有的列,這并不意味著其他人不會向表中添加額外的列。

它還增加了計劃執(zhí)行緩存的開銷,因為它必須獲取有關(guān)表的元數(shù)據(jù),以了解哪些列在*中


查看完整回答
反對 回復(fù) 2019-06-03
?
拉風的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

一個主要原因是,如果您從表中添加/刪除列,則任何正在進行SELECT*調(diào)用的查詢/過程現(xiàn)在都將得到比預(yù)期更多或更少的數(shù)據(jù)列。


查看完整回答
反對 回復(fù) 2019-06-03
?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

  1. 以一種迂回的方式,您正在打破關(guān)于在可能的情況下使用嚴格類型的模塊化規(guī)則。直白幾乎是普遍更好的。

  2. 即使您現(xiàn)在需要表中的每一列,以后也可以添加更多的列,這將在每次運行查詢時被刪除,并且可能會影響性能。這會損害性能,因為

    • 你正在從電線上提取更多的數(shù)據(jù);
    • 因為您可能會挫敗優(yōu)化器將數(shù)據(jù)直接從索引中提取出來的能力(對于所有屬于索引的列的查詢)。而不是在表本身中進行查找。

何時使用SELECT*

當您顯式地需要表中的每一列時,而不是在編寫查詢時需要表中的每一列時。例如,如果正在編寫一個需要顯示表的全部內(nèi)容的DB管理應(yīng)用程序(不管它們是什么),那么您可以使用這種方法。


查看完整回答
反對 回復(fù) 2019-06-03
  • 4 回答
  • 0 關(guān)注
  • 1203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號