我遇到的文章表明,SELECT COUNT(*) FROM TABLE_NAME当表有很多行和很多列时会很慢.
我有一个表可能包含数十亿行[它有大约15列].有没有更好的方法来获得表的行数的精确计数?
请在回答之前考虑以下事项:
我正在寻找独立于数据库供应商的解决方案.如果它涵盖MySQL,Oracle,MS SQL Server,那就没关系.但如果确实没有数据库供应商独立解决方案,那么我将为不同的数据库供应商寻求不同的解决方案.
我不能使用任何其他外部工具来做到这一点.我主要是在寻找基于SQL的解决方案.
我无法进一步规范我的数据库设计.它已经在3NF,而且已经编写了很多代码.
我想从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)的最佳方法是什么?
如果我有一个插入语句,例如:
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 Server的MySQL转储.我需要能够选择表并导出模式和数据(或者我可以通过SQL Server Management Studio导出模式并以某种方式单独导出数据).
我需要这些数据能够转向并返回到SQL Server,因此需要维护GUID/uniqueidentifier和其他列类型.
有谁知道这个好工具?
我需要在SQL服务器上编写一个查询来获取特定表中的列列表,其关联的数据类型及其长度以及它们是否为空.我设法做了这么多.但是现在我还需要针对列进入同一个表 - 如果它是主键,则为TRUE.我该怎么做呢 ?
这是输出应该是这样的:
TRUE
请帮我!
我已经开始阅读有关Common Table Expression的内容,并且无法想到我需要使用它们的用例.它们似乎是多余的,因为派生表可以做到这一点.有什么我缺少或不理解?有人能给我一个简单的限制例子,通过常规的select,derived或temp表查询来说明CTE的情况吗?任何简单的例子都将受到高度赞赏.
我有一个这种布局的表:
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.我想允许NULL在MenuId存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个.
我到目前为止的想法是:
使用一些硬编码的UUID(例如全零)而不是null.
但是,MenuId每个用户的菜单都有一个FK约束,所以我必须为每个用户创建一个特殊的"空"菜单,这是一个麻烦.
使用触发器检查是否存在空条目.
我认为这是一个麻烦,我喜欢尽可能避免触发器.另外,我不相信他们能保证我的数据永远不会处于不良状态.
只需忘记它并检查中间件或插入函数中是否存在空条目,并且没有此约束.
我正在使用Postgres 9.0.
我有什么方法可以忽略吗?
我知道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语句中左右连接的区别.