我将缩短我的问题。(SQL-Server 2008)
在创建新表时,为每一列创建索引是个好主意吗?
我为什么要说这个?
今天我正在创建一个数据库,我的老板在我身后,他说:
“哦,为每一列创建一个索引很好”(然后他向我展示了这样做的图形方式)。
我现在正在研究索引,我不确定这是否是个好主意,因为每次表上有插入\更新时,每个索引都会更新。
一些建议?
我有一个查询,其中使用了以下内容
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)
但没有用。任何人都可以请帮忙!
我需要在包含 3 列的表中添加一列:
这 3 列永远不会改变。它就像一个“日志”表,只能添加行,不能删除或更改行
我需要的第四列(计算列)是一个标志列,它将显示状态是否是基于 insert_date 的最后一次状态更改。
如果是最后一个状态,则显示 1,否则显示 0。我希望我解释得足够好。下面是一个例子:
当我想将表 A 的列的值限制为仅从表 B 的相关列中的一组可选值中获取时,我遇到了麻烦。
问题是表 B 的相关列不是外键。如果我这样做,我想我可以为不同的列值多次使用相同值的正确状态将是不可能的 - 这不是我寻找的行为。
那么可以做什么呢?
我试图减少我们应用程序数据库上的巨大性能问题。我们使用 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)
顺便说一句,如果您对查询的形式有任何意见或一般性建议,请随时发表评论。
我需要在一张表中包含 2 个标识列。一个是正常身份,另一个将每年重置。
我DBCC CHECKIDENT ('TestTable', RESEED, 0)在插入程序的帮助下完成了重置部分。
但除了这个,我不知道如何拥有一个正常的身份。解决方案可能使用两个表,但我更喜欢将它们都放在一个表中。
我想从表中选择最后 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)
期望它会对选定的行重新排序,但它不起作用。
那么我怎样才能实现它呢?
最近我在代码中遇到了一个错误,相当于这个片段:
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 的人,但它看起来确实是一个非常奇怪的语法怪癖,还是一个错误?
升级还是新建?有什么建议?有没有人有任何关于这个过程的陷阱或战争故事要分享?
我们在 Prod 中有一个 2012 实例,它同时具有 OLTP 和 OLAP 数据库。我们正在创建两个实例,一个专用于这些任务中的每一个。OLAP 实例是一个新版本,但是为了最大限度地减少最终用户停机时间,我们正在考虑升级将容纳 OLAP 数据库的实例。
我正在寻找超出我在 Microsoft 文档中阅读的内容的一般建议。
我的查询有问题,这是工作查询,
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) sql-server ×5
mysql ×4
date-format ×1
datetime ×1
identity ×1
index ×1
order-by ×1
postgresql ×1
update ×1