当前位置:首页 » 编程语言 » 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')