1. sql語句中 用 inner join 連接兩張表,大表放在前面比較快還是小表放在前面比較快。
小表在前可以提高sql執行效率。
首先將大表放在前面,即如圖(tmp2表數據量為40億,tmp1數據量只有81條),這樣執行時間為3小時21分鍾,然後再將小表放在前面,執行速度為10分鍾。
(1)多條sql和表連接哪個快擴展閱讀:
結構化查詢語言包含6個部分:
1、數據查詢語言(DQL:Data Query Language):其語句,也稱為「數據檢索語句」,用以從表中獲得數據,確定數據怎樣在應用程序給出。
保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。
2、數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於添加、修改和刪除。
3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。
4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現許可權控制,確定單個用戶和用戶組對資料庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在資料庫中創建新表或修改、刪除表(CREAT TABLE 或 DROP TABLE);為表加入索引等。
6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。
參考資料:網路——sql語句
2. 寫一條很多關聯表的sql好還是 寫幾條簡單的sql好
看你伺服器性能。有2種可能。
如果你通過SQL做關聯表,會導致mssql伺服器CPU,IOPS,內存等資源高。但是後台,前端處理速度加快。
如果你想通過多次帶where條件的SELECT把數據放到後台處理,那麼mssql服務的連接數就相對偏高,後台CPU、內存資源則會高,考慮到事務情況還有可能會有短暫鎖表。壓力在後台。
所以,具體是看你資料庫和伺服器情況。如果只針對mssql,第一種情況效率高,不過消耗資源高,第二種情況連接數多,導致沒錯請求都連資料庫,考慮互通與事務,效率相對降低。
3. C# 多表連接 多次訪問資料庫 哪個快
1、數據少,怎麼都可以,對速度沒有多少影響(主要是感覺不出來)
2、數據多,多表連接查詢比多次查詢快些,多次查詢需要多次調用類進行操作,而多變連接查詢,只需要調用一次類,但是兩種情況下都需要一定時間,建議查詢時採用線程休息命令,給出提示,Thread.sleep(200)等,讓查詢設計更加人性
4. sql資料庫數據多表和一個表多行那個查詢速度快
<bean id="CollectionBean" class="test.CollectionBean" parent="abstractCollectionBean">
public class Springusercontroller extends AbstractCommandController{
private String page;
private String error;
private IuserinfoService service;
5. 資料庫里相比之下是多表操作的速度快呢還是單錶快
當然是單表效率比較高,索引也是提高效率的有效方法。
如果數據量超過10萬,應該使用sqlserver,
6. SQL中單表多欄位查詢快,還是多表聯接查詢快呢
執行結果是一樣的, 第一種按條件匹配兩個表檢索數據,這是最常用的寫法,第二種單從上面的語句來看,有點畫蛇添足的感覺, 先將SELECT * FROM B WHERE typeID = 0 視為一個集合(可以認為是臨時表),然後在去關聯A 表 , 感覺執行效率第一種應該更好
7. 在sql語句多表連接中,in、exists、join那個效率更高一點。
EXISTS、IN與JOIN,都可以用來實現形如「查詢A表中在(或不在)B表中的記錄」的查詢邏輯。
在查詢的兩個表大小相當的情況下,3種查詢方式的執行時間通常是:
EXISTS <= IN <= JOIN
NOT EXISTS <= NOT IN <= LEFT JOIN
只有當表中欄位允許NULL時,NOT IN的方式最慢:
NOT EXISTS <= LEFT JOIN <= NOT IN
但是如果兩個表中一個較小,一個較大,則子查詢表大的用exists,子查詢表小的用in,因為in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。而無論那個表大,用not exists都比not in要快。這是因為如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。
IN的好處是邏輯直觀簡單(通常是獨立子查詢);缺點是只能判斷單欄位,並且當NOT IN時效率較低,而且NULL會導致不想要的結果。
EXISTS的好處是效率高,可以判斷單欄位和組合欄位,並不受NULL的影響;缺點是邏輯稍微復雜(通常是相關子查詢)。
JOIN用在這種場合,往往是吃力不討好。JOIN的用途是聯接兩個表,而不是判斷一個表的記錄是否在另一個表。
8. SQL連表查詢跟一個個表查詢那個快各有什麼優點和缺點
SQL鏈接表查詢稱為聯合查詢,表查詢是單個查詢。其區別和優點如下:
1.從發展效率的角度看:
聯合查詢是需要多個單查詢邏輯組合才能完成的查詢工作,聯合查詢只需要一個SQL就可以完成查詢工作,即將業務邏輯轉化為SQL,由資料庫來處理,相對來說,開發效率會更高。
2.從查詢效率來看:
單個查詢具有更好的可重用性,因此比聯合查詢更有效。
當讀取或寫入資料庫時,資料庫使用鎖機制來限制其他連接對其進行操作。由於聯邦查詢比單個查詢慢得多,它們會增加鎖爭用,因此單個查詢更好。
3.從邏輯結構層面來看,分層原則
關聯表示業務規則/邏輯。如果經常使用關聯查詢,就會將大量的業務規則和邏輯放入資料庫中執行,這將大大增加CPU、內存、IO等資源的消耗。
4.從資源利用的角度來看
在大多數情況下,並不是所有相關查詢的結果都得到了有效的使用。例如,後台管理的列表界面會顯示分頁、關聯查詢的結果集,只使用當前頁面的數據,而資料庫需要消耗額外的資源才能得到整個結果集。
5.從架構的可伸縮性的角度來看
大量的相關查詢將導致集中式資料庫體系結構難以轉化為分布式體系結構,可擴展性優化也難以實現。關聯查詢方便快捷,開發效率更高。
不使用關系查詢在體系結構級別上有很多優勢,但是它需要大量的系統分析、設計和開發功能。一般在互聯網行業,如用戶數量最好重視這方面。
由於數據量小,兩個查詢的效率基本沒有差別,但在實際應用中,需要根據數據量、業務復雜度等進行綜合評價。
9. 資料庫(比如MYSQL) ,表連結查詢與子查詢哪個效率高些 為什麼
in子查詢、exists子查詢、連接,效率的探討
以下是SQL的幫助 (高級查詢優化概念)
Microsoft® SQL Server™ 2000 使用內存中的排序和哈希聯接技術執行排序、交集、聯合、差分等操作。SQL Server 利用這種類型的查詢計劃支持垂直表分區,有時稱其為分列存儲。
SQL Server 使用三種類型的聯接操作:
嵌套循環聯接
合並聯接
哈希聯接
如果一個聯接輸入很小(比如不到 10 行),而另一個聯接輸入很大而且已在其聯接列上創建索引,則索引嵌套循環是最快的聯接操作,因為它們需要最少的 I/O 和最少的比較。有關嵌套循環的更多信息,請參見了解嵌套循環聯接。
如果兩個聯接輸入並不小但已在二者聯接列上排序(例如,如果它們是通過掃描已排序的索引獲得的),則合並聯接是最快的聯接操作。如果兩個聯接輸入都很大,而且這兩個輸入的大小差不多,則預先排序的合並聯接提供的性能與哈希聯接相似。然而,如果兩個輸入的大小相差很大,則哈希聯接操作通常快得多。有關更多信息,請參見了解合並聯接。
哈希聯接可以有效處理很大的、未排序的非索引輸入。它們對復雜查詢的中間結果很有用,因為:
中間結果未經索引(除非已經顯式保存到磁碟上然後創建索引),而且生成時通常不為查詢計劃中的下一個操作進行適當的排序。
查詢優化器只估計中間結果的大小。由於估計的值在復雜查詢中可能有很大的誤差,因此如果中間結果比預期的大得多,則處理中間結果的演算法不僅必須有效而且必須適度弱化。
哈希聯接使得對非規范化的使用減少。非規范化一般通過減少聯接操作獲得更好的性能,盡管這樣做有冗餘之險(如不一致的更新)。哈希聯接則減少使用非規范化的需要。哈希聯接使垂直分區(用單獨的文件或索引代表單個表中的幾組列)得以成為物理資料庫設計的可行選項。有關更多信息,請參見了解哈希聯接。
10. SQL連表查詢跟一個個表查詢那個快各有什麼優點和缺點
一般情況下是一條語句來的快。如果表2的數據比表1多出幾個數量級的話,並且表2中該id欄位有索引,則有可能使用多次查詢會快點。
一次查詢的優點是只需要一次連接,資料庫查詢的時候,連接是個耗時的操作。缺點是如果兩個表數據多,則中間結果集太大,需要較多的內存資源。
多次查詢的優缺點和一次查詢正好反過來。另外多次查詢也可以在程序中對每一次查詢的中間結果做處理,這是一個靈活性。