我们有一个SQL Server 2005数据库,我们想要提高批量删除/插入/选择的性能,我注意到它decimal(18,0)用于主键.我知道这将给我们带来更多的价值,bigint但希望它可能是一个快速的胜利,并且应该通过我的计算能够持续数百万年的增长.
我在.net docs中看到小数点需要16个字节而不是long所需的8个字节,但是在SQL Server中,它看起来像bigint 需要8个字节,但decimal(18,0)只占用5个字节 - 也可以看到select DATALENGTH(max(id)) from table.它是否正确?
有没有其他原因bigint可能会更慢或我应该坚持decimal(18,0)?
我正在使用LINQ to NH来获取应用启动时的大量数据.我特意添加ToList()强制立即查询执行:
Group group = GetGroup();
Log.Info("started");
var list = Session.Linq<Data>()
.Where(p => p.Group.Id == group.Id)
.OrderByDescending(p => p.Stamp.Counter) /* Stamp is composite mapping */
.Select(p => new
{
Counter = p.Stamp.Counter,
Status = p.Status,
})
.Take(4000)
.ToList();
Log.Info("done");
Run Code Online (Sandbox Code Playgroud)
检查NHibernate.SQL记录器的DEBUG日志会按预期提供以下SQL(当我开始监视时,在SQL事件探查器中弹出相同的查询):
SELECT top 4000 this_.Counter as y0_, this_.Status as y1_
FROM [Data] this_
LEFT OUTER JOIN [Group] group1_ ON this_.Group_id=group1_.Id
WHERE group1_.Id = @p0
ORDER BY this_.Counter desc; @p0 = 1
Run Code Online (Sandbox Code Playgroud)
问题是,从我的应用程序调用时,此查询需要2分钟才能完成,而在SSMS中执行则需要0.5秒!实际上,当应用程序正在等待查询完成时,我可以在SSMS中执行它并立即获得结果.
你认为这种差异来自哪里?
我有一个关于SQL的问题.情况就是这样:我有一个有5列(C1 ... C5)的表我想做
select (C1+C2*3-C3*5/C4) from table;
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以命名结果列以便稍后在查询中引用?
为了完美,这里或多或少是一个.
Microsoft SQL Server仅包含datetime用于存储日期和时间的字段类型.
但是,让我们说我想存储一个营业时间列表,其中日期完全无关紧要.目前我正在使用该datetime类型,然后只显示数据的时间部分.但我有两个问题.
所以它引出了一个问题; 在没有特定time字段的情况下(如在MySQL中),从00:00到23:59只存储一天中特定时间的最佳方式是什么?
更新:它是SQL Server 2005.(另外,我只是想知道在没有time类型的情况下通常要做什么.)
select uuid_generate_v4() as one, uuid_generate_v4() as two;
Run Code Online (Sandbox Code Playgroud)
"一个"uuid和"两个"uuid是平等的!
CREATE TABLE "TB"
(
"Id" uuid NOT NULL DEFAULT uuid_generate_v4(),
"Title" character varying NOT NULL,
CONSTRAINT "TB_Class_ID" PRIMARY KEY ("Id")
);
Run Code Online (Sandbox Code Playgroud)
postgresql 9.0 pgAdmin 1.12.3
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
insert into "TB" ("Id", "Title") values (uuid_generate_v4(), '111');
Run Code Online (Sandbox Code Playgroud)
要么
insert into "TB" ("Title") values ('111');
insert into "TB" ("Title") values ('111');
insert into "TB" ("Title") values ('111');
Run Code Online (Sandbox Code Playgroud)
结果:
ERROR: duplicate key …Run Code Online (Sandbox Code Playgroud) 我使用的是MS SQL Server.
我已经交了一些没有约束的大桌子,没有钥匙也没有.
我知道有些列具有唯一值.对于给定的表,是否有一种聪明的方法来查找具有唯一值的cols?
现在,我通过计算是否存在与表中的行一样多的DISTINCT值来手动为每列执行此操作.
SELECT COUNT(DISTINCT col) FROM table
Run Code Online (Sandbox Code Playgroud)
可能会让一个cusor循环遍历所有列,但想知道是否有人知道更聪明或内置函数.
谢谢.
我正在寻找插入此方法的方法
SET GLOBAL group_concat_max_len=15000
在现有的SQL查询中,如下所示:
SELECT *
FROM `Pages`
WHERE id =1
UNION SELECT 1 , 2, IF( 1 >0, SET GLOBAL group_concat_max_len=15000,'B' )
Run Code Online (Sandbox Code Playgroud)
但我无法使它工作,因为通常这个查询是自己执行的,我想知道你们中有些人是否有任何想法如何让它工作
我在数据库中有每个标识符的以下2条信息.控制它们的公司,以及控制它们的公司.
沿线的东西,2个表(忽略一些唯一标识符):
组织
orgid | org_immediate_parent_orgid
1 | 2
2 | 2
3 | 1
5 | 4
Run Code Online (Sandbox Code Playgroud)
关系orgid - > org_immediate_parent_orgid意味着公司有父母.在我看来它只有相关的org_immediate_parent_orgid - > orgid公司的母公司作为子公司
org_affiliations
orgid | affiliated_orgid
2 | 3
2 | 5
4 | 1
1 | 5
Run Code Online (Sandbox Code Playgroud)
orgid - > affiliated_orgid是公司的附属机构
视觉表示应该是这样的:

关于组织的红色关系,蓝色关系org_affiliations.
如果想让2所有的所有公司(或2的子公司)拥有它们的一部分:
select m.org_immediate_parent_orgid
,m.orgid
from oa.organizations m
where m.org_immediate_parent_orgid is not null
start with m.orgid in (Identifiers)
connect by nocycle prior m.orgid=m.org_immediate_parent_orgid
Run Code Online (Sandbox Code Playgroud)
回报
org_immediate_parent_orgid| orgid
1 | 2
2 …Run Code Online (Sandbox Code Playgroud) 我正在运行以下脚本 -
BEGIN
select department_name
from egpl_department
where department_id in (select department_id
from egpl_casemgmt_activity);
END ;
Run Code Online (Sandbox Code Playgroud)
得到了错误 -
PLS-00103: Encountered the symbol "end-of-file" when
expecting one of the following:
;
Run Code Online (Sandbox Code Playgroud) 如果结果" joe@stackoverflow.com",我想找到@符号的位置(3).可能吗?它不会出现的SQLite具有相当于INSTR,LOCATE,POSITION或任何这样的功能.
SELECT ?('joe@stackoverflow.com')
Run Code Online (Sandbox Code Playgroud)
更新我最终注册了自定义扩展功能,但我不得不感到惊讶.
sql ×10
sql-server ×3
mysql ×2
plsql ×2
.net ×1
database ×1
nhibernate ×1
oracle ×1
performance ×1
postgresql ×1
recursion ×1
sqlite ×1
types ×1
unique ×1