标签: sql

主键的SQL Server BIGINT或DECIMAL(18,0)

我们有一个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)

sql sql-server performance types sql-server-2005

11
推荐指数
2
解决办法
3万
查看次数

NHibernate SQL查询速度慢

我正在使用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中执行它并立即获得结果.

你认为这种差异来自哪里?

.net sql nhibernate

11
推荐指数
1
解决办法
4287
查看次数

重命名sql中的选择列

我有一个关于SQL的问题.情况就是这样:我有一个有5列(C1 ... C5)的表我想做

 select (C1+C2*3-C3*5/C4) from table;
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以命名结果列以便稍后在查询中引用?

mysql sql

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

SQL Server:最佳的存储时间方式(无日期)

为了完美,这里或多或少是一个.

Microsoft SQL Server仅包含datetime用于存储日期和时间的字段类型.

但是,让我们说我想存储一个营业时间列表,其中日期完全无关紧要.目前我正在使用该datetime类型,然后只显示数据的时间部分.但我有两个问题.

  1. 这似乎效率低下.
  2. 它可能会让未来的开发人员感到困惑,因为他们可能不知道是否在任何地方使用了这个时间.

所以它引出了一个问题; 在没有特定time字段的情况下(如在MySQL中),从00:00到23:59只存储一天中特定时间的最佳方式是什么?

更新:它是SQL Server 2005.(另外,我只是想知道在没有time类型的情况下通常要做什么.)

sql sql-server

11
推荐指数
2
解决办法
8534
查看次数

postgreSQL uuid代

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)

sql database postgresql

11
推荐指数
3
解决办法
2万
查看次数

如何确定表是否具有一些唯一列

我使用的是MS SQL Server.

我已经交了一些没有约束的大桌子,没有钥匙也没有.

我知道有些列具有唯一值.对于给定的表,是否有一种聪明的方法来查找具有唯一值的cols?

现在,我通过计算是否存在与表中的行一样多的DISTINCT值来手动为每列执行此操作.

SELECT COUNT(DISTINCT col) FROM table
Run Code Online (Sandbox Code Playgroud)

可能会让一个cusor循环遍历所有列,但想知道是否有人知道更聪明或内置函数.

谢谢.

sql sql-server unique

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

查询中的MySQL group_concat_max_len

我正在寻找插入此方法的方法

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)

但我无法使它工作,因为通常这个查询是自己执行的,我想知道你们中有些人是否有任何想法如何让它工作

mysql sql

11
推荐指数
2
解决办法
3万
查看次数

SQL多条件CTE递归

我在数据库中有每个标识符的以下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)

sql recursion plsql recursive-query common-table-expression

11
推荐指数
1
解决办法
1187
查看次数

PLS-00103:当遇到以下情况之一时遇到符号"文件结束":

我正在运行以下脚本 -

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)

sql oracle plsql

11
推荐指数
3
解决办法
8万
查看次数

如何在SQLite列中找到字符的位置?

如果结果" joe@stackoverflow.com",我想找到@符号的位置(3).可能吗?它不会出现的SQLite具有相当于INSTR,LOCATE,POSITION或任何这样的功能.

SELECT ?('joe@stackoverflow.com')
Run Code Online (Sandbox Code Playgroud)

更新我最终注册了自定义扩展功能,但我不得不感到惊讶.

sql sqlite

11
推荐指数
3
解决办法
2万
查看次数