當前位置:首頁 » 編程語言 » countsql效率
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

countsql效率

發布時間: 2022-01-24 14:49:10

1. oracle兩張表union all的時候取 count有兩種sql寫法,哪種效率比較好

應該是一樣快的……

其實我一開始也不清楚,但是手頭正好有大表,於是自己動手試了試,實驗表的數量級為3億,這是一般實際項目中能涉及到的最大數量級了。

實踐結果表明二者耗費是等同的。但是過程實際上是存在差別的。

首先我們可以排除兩種方法括弧外的耗費。因為無論是select sum 還是 select count(*) 都基本不佔用多少資源。大部分資源都被括弧裡面的sql所佔用了。

你的第一種方法相當於分別計算兩次select count(*) as tmpcount from tab 這個操作,然後最終耗費時間相當於兩次操作的計算之和。

第二種方法則是一次性計算出select * as tmpcount from tab1 union all select * as tmpcount from tab2 這個操作的耗費。

不過因為實際無論是第一種還是第二種,本質上都是遍歷兩個表。所有即便第一種耗費為600+400=1000,第二種耗費為1000,兩者效率依然是一樣的。

2. 請教SQL執行一條COUNT語句,如何提供高效率

cout(主鍵) 應該比較快 !不過都差不多,看你數據量多少吧

3. sql count(* ) 加到where條件中對性能有沒有影響

對於小型項目來說,sql語句的寫法要求沒有那麼高的要求,用的最多也就幾十行至幾百行,而對於企業大型項目來說,sql語句要有利於再次開發,有可利於以後的其他程序員看的明白,要多注意sql的便捷化。

4. SQL里同一個表不同條件進行count(), 是同一個select里使用case when效率高還是分成幾個select效率高

效率都差不多 不過使用case when 應該會快點
多個select需要union 連接

5. 查詢用戶是否存在的SQL語句優化,是用select count(*)還是用select *

select count的話,要進行額外的計數;
select * 的話直接獲取數據;
如果只是判斷用戶是否存在的話,可以將select * 替換為 select 1 即可。避免對所有列進行解析。

6. SQL查詢速度 Select Count(1)

如果null參與聚集運算,則除count(*)之外其它聚集函數都忽略null。
如:
ID DD
1 e
2 null
select count(*) from table --結果是2
select count(DD) from table ---結果是1
有說count(1)效率高,感覺差不多,沒啥區別。

一、關於count的一些謠言:
1、count(*)比count(val)更慢!項目組必須用count(val),不準用count(*),誰用扣誰錢!
2、count(*)用不到索引,count(val)才能用到。
3、count(*)是統計出全表的記錄,是吞吐量的操作,肯定用不到索引。
4、count(1)比count(*)的速度快。
二、驗證count(*)和count(val)
1、首先創建一個表,使用count(*)和count(val)查詢比較:

----刪除echo表----
SQL> drop table echo purge;
drop table echo purge
*
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在

----創建一張echo的測試表----
SQL> create table echo as select * from dba_objects;

表已創建。

SQL> update echo set object_id = rownum;

已更新72509行。

SQL> commit;

提交完成。

SQL> set timing on
SQL> set linesize 100
SQL> set autotrace on
SQL> select count(*) from echo;

COUNT(*)
----------
72509

已用時間: 00: 00: 00.01

執行計劃
----------------------------------------------------------
Plan hash value: 99109176

-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 290 (1)| 00:00:04 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| ECHO | 80064 | 290 (1)| 00:00:04 |
-------------------------------------------------------------------

Note
-----
- dynamic sampling used for this statement (level=2)

統計信息
----------------------------------------------------------
4 recursive calls
0 db block gets
1265 consistent gets
0 physical reads
11060 redo size
425 bytes sent via SQL*Net to client
415 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

SQL> select count(*) from echo;

COUNT(*)
----------
72509

已用時間: 00: 00: 00.01

執行計劃
----------------------------------------------------------
Plan hash value: 99109176

-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 290 (1)| 00:00:04 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| ECHO | 80064 | 290 (1)| 00:00:04 |
-------------------------------------------------------------------

Note
-----
- dynamic sampling used for this statement (level=2)

統計信息
----------------------------------------------------------
0 recursive calls
0 db block gets
1038 consistent gets
0 physical reads
0 redo size
425 bytes sent via SQL*Net to client
415 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

SQL> select count(object_id) from echo;

COUNT(OBJECT_ID)
----------------
72509

已用時間: 00: 00: 00.01

7. sql 文中同樣的where條件,count這個sql文的 件數 和和執行抽出sql文的效率一樣嗎

看有沒有主鍵,如果有主鍵,可以理解為一樣的

如果沒有主鍵,count效率會低很多

8. mysql Count 查詢記錄總條數,效率很慢

只記錄一列的總條數會快點count(列名)。或者where條件改為city like '%揚州' or city like '揚州%',city like '%揚州%' 是進行全表查詢,修改後是兩個范圍的掃描,性能也能提高一些,你試一試。還可以使用索引。

9. select count(*) from 速度很慢

單純把表聯接由=的寫法改成inner join的寫法不會提升效率,因為兩者是等價寫法。試試下面的寫法:Select Count(*)
From np_goldidea_vote c, dept_with_path b, (select main_id,column_id, status from np_goldidea_main where column_id = '2' and status = 9 ) a
Where c.vote_org_id = b.dept_id
And a.main_id = c.main_id
Group By b.path 這個寫法的思路是先做a的選擇運算,這樣在多表連接時,a的數據量會大大降低,從而提高效率。另外,這三個表除了建立默認的主鍵和唯一性索引外,在b的path上一定要建立索引,這是由於需要按path分組。還有,在連接欄位上也要建立索引,這樣表連接時,很多時候只需要訪問索引而不需要訪問表,從而提高效率。

10. 關於sql語句count(*)的優化

懶得看完;

給個樣式你自己看一下有沒有幫助,用EXISTS應該比count後再比較會快很多
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')