小编ype*_*eᵀᴹ的帖子

为新表中的每一列创建索引是个好主意吗?

我将缩短我的问题。(SQL-Server 2008)

在创建新表时,为每一列创建索引是个好主意吗?

我为什么要说这个?

今天我正在创建一个数据库,我的老板在我身后,他说:

“哦,为每一列创建一个索引很好”(然后他向我展示了这样做的图形方式)。

我现在正在研究索引,我不确定这是否是个好主意,因为每次表上有插入\更新时,每个索引都会更新。

一些建议?

index sql-server

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

如何从日期中删除前导零

我有一个查询,其中使用了以下内容

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%d'),INTERVAL (tt.day_id- 1 )DAY) as date
Run Code Online (Sandbox Code Playgroud)

字段的数据类型是datetime,结果日期是这样的

2015-04-06
Run Code Online (Sandbox Code Playgroud)

但想要的结果是这样的

2015-04-6
Run Code Online (Sandbox Code Playgroud)

我不需要0在前一天。我试过这个

date_add(DATE_FORMAT(ss.week_startdate,'%y-%m-%e'),INTERVAL (tt.day_id- 1 )DAY) as date
Run Code Online (Sandbox Code Playgroud)

但没有用。任何人都可以请帮忙!

mysql date-format datetime

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

添加“上次发生时间”标志列

我需要在包含 3 列的表中添加一列:

  1. GroupKey - 显示项目的编号。
  2. 状态 - 组根据插入日期所处的状态编号。状态编号可以前后更改多次。
  3. 插入日期 - 状态更改的时间和日期。

这 3 列永远不会改变。它就像一个“日志”表,只能添加行,不能删除或更改行

我需要的第四列(计算列)是一个标志列,它将显示状态是否是基于 insert_date 的最后一次状态更改。

如果是最后一个状态,则显示 1,否则显示 0。我希望我解释得足够好。下面是一个例子:

这是桌子。

sql-server greatest-n-per-group

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

添加引用不是主键或唯一键的列的外键

当我想将表 A 的列的值限制为仅从表 B 的相关列中的一组可选值中获取时,我遇到了麻烦。

问题是表 B 的相关列不是外键。如果我这样做,我想我可以为不同的列值多次使用相同值的正确状态将是不可能的 - 这不是我寻找的行为。

那么可以做什么呢?

mysql database-design

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

null 是否比 iif(exists) 更好?

我试图减少我们应用程序数据库上的巨大性能问题。我们使用 SQL Server 2014,我们有很多视图。

我想知道重写左连接以在预测中使用存在是否有重大影响?

我的问题是:在构建根据相关匹配项的存在投射不同数据的查询时,是否有任何有关性能的最佳实践?

我的意思是,这些查询中的哪一个可以被认为更好?

1):

select
        a.Id,
        case when b.Id is not null 
             then convert(bit,1) 
             else convert(bit,0)
        end IsActive
from A a
left join B b on a.Id = b.Id;
Run Code Online (Sandbox Code Playgroud)

2):

select
        a.Id,
        iif(exists(select top 1 1 from B where Id = a.Id),
            convert(bit,1), 
            convert(bit,0)
           )  IsActive
from A a;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。

sql-server sql-server-2014

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

表中有 2 个身份

我需要在一张表中包含 2 个标识列。一个是正​​常身份,另一个将每年重置。

DBCC CHECKIDENT ('TestTable', RESEED, 0)在插入程序的帮助下完成了重置部分。

但除了这个,我不知道如何拥有一个正常的身份。解决方案可能使用两个表,但我更喜欢将它们都放在一个表中。

sql-server identity sql-server-2012

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

按 asc 获取最后 X 行顺序

我想从表中选择最后 X 行,所以我所做的是:

SELECT * FROM table ORDER BY id DESC LIMIT 120
Run Code Online (Sandbox Code Playgroud)

它有效,但我希望它按升序排列,所以我尝试了:

SELECT * FROM table ORDER BY id DESC LIMIT 120 ORDER BY id ASC
Run Code Online (Sandbox Code Playgroud)

期望它会对选定的行重新排序,但它不起作用。

那么我怎样才能实现它呢?

mysql order-by

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

Postgres 在 Update 语句中将语法错误评估为布尔值

最近我在代码中遇到了一个错误,相当于这个片段:

create table testing(num int, dt date, istrue boolean);

insert into testing values (1, '2018-01-01', True);

UPDATE testing SET num = 2, istrue = null AND dt = '2018-01-01';
Run Code Online (Sandbox Code Playgroud)

UPDATE 语句实际上应该是:

UPDATE testing SET num = 2, istrue = null WHERE dt = '2018-01-01';
Run Code Online (Sandbox Code Playgroud)

然而 postgresql 很高兴地接受了 UPDATE 为有效并评估了代码:

null AND dt = '2018-01-01'
Run Code Online (Sandbox Code Playgroud)

在第二个等号作为布尔值之后,因此基于错误的逻辑更新了数据。

我已经在其他 SQL 风格中尝试过这个,但这是不允许的,他们想要一个 WHERE。

我不是 postgres 的人,但它看起来确实是一个非常奇怪的语法怪癖,还是一个错误?

postgresql update

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

从 SQL Server 2012 升级到 SQL Server 2017

升级还是新建?有什么建议?有没有人有任何关于这个过程的陷阱或战争故事要分享?

我们在 Prod 中有一个 2012 实例,它同时具有 OLTP 和 OLAP 数据库。我们正在创建两个实例,一个专用于这些任务中的每一个。OLAP 实例是一个新版本,但是为了最大限度地减少最终用户停机时间,我们正在考虑升级将容纳 OLAP 数据库的实例。

我正在寻找超出我在 Microsoft 文档中阅读的内容的一般建议。

sql-server sql-server-2012 sql-server-2017

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

如何在 WHERE 子句上使用选择(查询)别名?

我的查询有问题,这是工作查询,

    SELECT res_ID,res_fName,res_mName,res_lName,rs.suffix,rms.marital_Name,rg.gender_Name,rr.religion_Name,ro.occupation_Name,ros.occuStat_Name,res_Date_Record,rc.country_citizenship,res_Bday,TIMESTAMPDIFF(YEAR,res_Bday,CURDATE()) AS age,
(case  
 when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=1) then 'Maternal and Newborn'
 when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=1 and TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=12) then 'Babies'
when (TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=13 and TIMESTAMPDIFF(Month,res_Bday,CURDATE())<=24) then 'Toddlers'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=2 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=4) then 'Preschoolers'
 when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=5 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=8) then 'School Age Children'
 when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=9 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=12) then 'Tweens '
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=13 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=19) then 'Teenager'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=20 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=35) then 'Young Adult'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=36 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=55) then 'Middle-Aged Adults'
when (TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=56 and TIMESTAMPDIFF(Year,res_Bday,CURDATE())<=100) then 'Senior'
   end) Age_Stage
FROM resident_detail rd 
LEFT JOIN ref_suffixname rs …
Run Code Online (Sandbox Code Playgroud)

mysql

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