相关疑难解决方法(0)

计算非常大的表中的确切行数的最快方法?

我遇到的文章表明,SELECT COUNT(*) FROM TABLE_NAME当表有很多行和很多列时会很慢.

我有一个表可能包含数十亿行[它有大约15列].有没有更好的方法来获得表的行数的精确计数?

请在回答之前考虑以下事项:

  • 我正在寻找独立于数据库供应商的解决方案.如果它涵盖MySQL,Oracle,MS SQL Server,那就没关系.但如果确实没有数据库供应商独立解决方案,那么我将为不同的数据库供应商寻求不同的解决方案.

  • 我不能使用任何其他外部工具来做到这一点.我主要是在寻找基于SQL的解决方案.

  • 我无法进一步规范我的数据库设计.它已经在3NF,而且已经编写了很多代码.

sql database

221
推荐指数
11
解决办法
47万
查看次数

COUNT(*)与COUNT(1)对COUNT(pk):哪个更好?

我经常发现这三种变体:

SELECT COUNT(*) FROM Foo;
SELECT COUNT(1) FROM Foo;
SELECT COUNT(PrimaryKey) FROM Foo;
Run Code Online (Sandbox Code Playgroud)

据我所知,他们都做同样的事情,我发现自己在我的代码库中使用了三个.但是,我不喜欢以不同的方式做同样的事情.我应该坚持哪一个?他们中的任何一个比其他两个更好吗?

sql select count

214
推荐指数
5
解决办法
10万
查看次数

SQL:如何获取列中每个不同值的计数?

我有一个名为"posts"的SQL表,如下所示:

id | category
-----------------------
1  | 3
2  | 1
3  | 4
4  | 2
5  | 1
6  | 1
7  | 2
Run Code Online (Sandbox Code Playgroud)

每个类别编号对应一个类别.我如何计算每个类别在一个SQL查询中出现在帖子上的次数?

例如,这样的查询可能会返回一个符号数组,如下所示: (1:3, 2:2, 3:1, 4:1)


我当前的方法是对每个可能的类别使用查询,例如:SELECT COUNT(*) AS num FROM posts WHERE category=#,然后将返回值组合成最终数组.但是,我正在寻找一种只使用一个查询的解决方案.

mysql sql count

152
推荐指数
1
解决办法
23万
查看次数

从表中选择1是什么意思?

我见过很多关于以下内容的查询.

Select 1  
From table
Run Code Online (Sandbox Code Playgroud)

这是什么1意思,它将如何执行,它将返回什么?

此外,在什么类型的场景中,可以使用它吗?

mysql sql plsql

132
推荐指数
10
解决办法
22万
查看次数

count(*)vs count(column-name) - 哪个更正确?

是否有所作为,如果你这样做count(*)VS count(column-name)在这两个例子?

我倾向于总是写作,count(*)因为它似乎更符合我的想法,它是一个集合函数,如果这是有道理的.

但我不确定它是否在技术上最好,因为我倾向于看到没有*经常写的示例代码.

计数(*):

select customerid, count(*), sum(price) 
from items_ordered
group by customerid
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

与count(列名):

SELECT customerid, count(customerid), sum(price)
FROM items_ordered
GROUP BY customerid
HAVING count(customerid) > 1;
Run Code Online (Sandbox Code Playgroud)

sql count

101
推荐指数
5
解决办法
8万
查看次数

使用存在1或存在的子查询*

我以前写这样的EXISTS检查:

IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

前一个DBA中的一个告诉我,当我做一个EXISTS条款时,请使用SELECT 1而不是SELECT *

IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

这真的有所作为吗?

sql t-sql sql-server

84
推荐指数
4
解决办法
2万
查看次数

可以选择*用法是否合理?

我一直向我的开发者讲道,这SELECT *是邪恶的,应该像瘟疫一样避免.

有什么理由可以说是合理的吗?

我不是在谈论COUNT(*)- 大多数优化者都可以解决这个问题.

编辑

我在谈论生产代码.

我看到这个不好的做法的一个很好的例子是select *在存储过程中使用的传统asp应用程序,用于ADO循环返回的记录,但是通过索引得到列.您可以想象在字段列表末尾之外的某处添加新字段时发生的情况.

sql select

62
推荐指数
7
解决办法
6102
查看次数

"选择1"是做什么的?

我看了一些文章,但真的不明白select 1 from做了什么?有人说"你应该用而不是select *".这是一个exapmle表:

cust_id     cust_name       cust_address

1000000001  Village Toys    Mapl
1000000002  Kids Place      South
1000000003  Fun4All         Sunny
1000000004  Fun4All         Riverside
1000000005  The Toy Store   53rd
Run Code Online (Sandbox Code Playgroud)

当我写下select 1 from customer_table这句话的内容时,结果会是什么?

sql-server-2008

57
推荐指数
5
解决办法
12万
查看次数

MYSQL计数(*)或计数(1)有什么好处?

相关(SQL Server): 计数(*)与计数(1)

你能告诉我性能有哪些(MySQL)吗?算(*)还是算(1)?

mysql sql performance

24
推荐指数
1
解决办法
2万
查看次数

MySQL中的COUNT(id)与COUNT(*)

假设表中存在主要字段"id"(如速度等),以下查询之间是否存在差异?

SELECT COUNT(id) 
  FROM table
Run Code Online (Sandbox Code Playgroud)

SELECT COUNT(*) 
  FROM table
Run Code Online (Sandbox Code Playgroud)

mysql sql count

21
推荐指数
2
解决办法
4万
查看次数