标签: sql

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

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

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

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

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

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

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

sql database

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

从PostgreSQL中的时间戳中提取日期(yyyy/mm/dd)

我想从PostgreSQL中的时间戳中提取日期部分.

我需要它是一个postgresql DATE类型,所以我可以将它插入到另一个DATE期望值的表中.

例如,如果我有2011/05/26 09:00:00,我想要2011/05/26

我试过铸造,但我只得到2011年:

timestamp:date
cast(timestamp as date)
Run Code Online (Sandbox Code Playgroud)

我尝试to_char()to_date():

SELECT to_date(to_char(timestamp, 'YYYY/MM/DD'), 'YYYY/MM/DD') 
FROM val3 WHERE id=1;
Run Code Online (Sandbox Code Playgroud)

我试着让它成为一个功能:

CREATE OR REPLACE FUNCTION testing() RETURNS void AS '
DECLARE i_date DATE;
BEGIN
    SELECT to_date(to_char(val1, "YYYY/MM/DD"),"YYYY/MM/DD") 
      INTO i_date FROM exampTable WHERE id=1;
    INSERT INTO foo(testd) VALUES (i);
END
Run Code Online (Sandbox Code Playgroud)

从PostgreSQL中的时间戳中提取日期(yyyy/mm/dd)的最佳方法是什么?

sql postgresql timestamp casting

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

220
推荐指数
7
解决办法
56万
查看次数

如何使用INSERT语句的OUTPUT子句获取标识值?

如果我有一个插入语句,例如:

INSERT INTO MyTable
(  
  Name,
  Address,
  PhoneNo
)
VALUES
(
  'Yatrix',
   '1234 Address Stuff',
   '1112223333'
)
Run Code Online (Sandbox Code Playgroud)

如何使用OUTPUT子句设置@var INT新行的标识值(被调用Id)?例如,我已经看过将INSERTED.Name放入表变量的示例,但我无法将其转换为非表变量.

我试过了OUPUT INSERTED.Id AS @var,SET @var = INSERTED.Id但都没有奏效.

sql sql-server-2005 insert

220
推荐指数
1
解决办法
26万
查看次数

如何获取SQL Server数据的脚本?

我正在寻找一种方法来做类似于SQL Server的MySQL转储.我需要能够选择表并导出模式和数据(或者我可以通过SQL Server Management Studio导出模式并以某种方式单独导出数据).

我需要这些数据能够转向并返回到SQL Server,因此需要维护GUID/uniqueidentifier和其他列类型.

有谁知道这个好工具?

sql sql-server export

219
推荐指数
8
解决办法
21万
查看次数

SQL Server查询以获取表中的列列表以及Data types,NOT NULL和PRIMARY KEY约束

我需要在SQL服务器上编写一个查询来获取特定表中的列列表,其关联的数据类型及其长度以及它们是否为空.我设法做了这么多.但是现在我还需要针对列进入同一个表 - 如果它是主键,则为TRUE.我该怎么做呢 ?

这是输出应该是这样的:

TRUE

请帮我!

sql sql-server sql-server-2005

219
推荐指数
11
解决办法
57万
查看次数

何时使用公用表表达式(CTE)

我已经开始阅读有关Common Table Expression的内容,并且无法想到我需要使用它们的用例.它们似乎是多余的,因为派生表可以做到这一点.有什么我缺少或不理解?有人能给我一个简单的限制例子,通过常规的select,derived或temp表查询来说明CTE的情况吗?任何简单的例子都将受到高度赞赏.

sql t-sql sql-server common-table-expression

219
推荐指数
7
解决办法
33万
查看次数

使用空列创建唯一约束

我有一个这种布局的表:

CREATE TABLE Favorites
(
  FavoriteId uuid NOT NULL PRIMARY KEY,
  UserId uuid NOT NULL,
  RecipeId uuid NOT NULL,
  MenuId uuid
)
Run Code Online (Sandbox Code Playgroud)

我想创建一个类似于此的唯一约束:

ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);
Run Code Online (Sandbox Code Playgroud)

但是,这将允许多行具有相同的(UserId, RecipeId)if MenuId IS NULL.我想允许NULLMenuId存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个.

我到目前为止的想法是:

  1. 使用一些硬编码的UUID(例如全零)而不是null.
    但是,MenuId每个用户的菜单都有一个FK约束,所以我必须为每个用户创建一个特殊的"空"菜单,这是一个麻烦.

  2. 使用触发器检查是否存在空条目.
    我认为这是一个麻烦,我喜欢尽可能避免触发器.另外,我不相信他们能保证我的数据永远不会处于不良状态.

  3. 只需忘记它并检查中间件或插入函数中是否存在空条目,并且没有此约束.

我正在使用Postgres 9.0.

我有什么方法可以忽略吗?

sql postgresql null database-design referential-integrity

219
推荐指数
2
解决办法
8万
查看次数

添加具有默认值的新SQL列

我正在寻找将列添加到MySQL数据库的语法,默认值为0

参考

mysql sql

218
推荐指数
5
解决办法
32万
查看次数

SQL Server中左连接和右连接之间的区别

我知道SQL Server中的连接.

例如.Table1,Table2有两个表.

他们的桌子结构如下.

create table Table1 (id int, Name varchar (10))

create table Table2 (id int, Name varchar (10))
Run Code Online (Sandbox Code Playgroud)

表1数据如下:

    Id     Name     
    -------------
    1      A        
    2      B    
Run Code Online (Sandbox Code Playgroud)

表2数据如下:

    Id     Name     
    -------------
    1      A        
    2      B 
    3      C
Run Code Online (Sandbox Code Playgroud)

如果我执行下面提到的两个SQL语句,则两个输出都是相同的

select *
from Table1
  left join Table2 on Table1.id = Table2.id

select *
from Table2
  right join Table1 on Table1.id = Table2.id
Run Code Online (Sandbox Code Playgroud)

请解释上述SQL语句中左右连接的区别.

sql sql-server join left-join right-join

218
推荐指数
7
解决办法
29万
查看次数