我有几个月在SQL Server中存储为1,2,3,4,... 12.我想将它们显示为1月,2月等.在SQL Server中是否有像MonthName(1)= January这样的函数?如果可能的话,我试图避免CASE声明.
在这个优秀的SO问题中,讨论了CTE和之间的sub-queries差异.
我想具体问一下:
在什么情况下,以下各项更有效/更快?
传统上,我temp tables在开发中使用了很多stored procedures- 因为它们看起来比许多交织在一起的子查询更具可读性.
Non-recursive CTEs非常好地封装数据集,并且非常易读,但是在某些情况下可以说它们总能表现得更好吗?或者是否必须总是摆弄不同的选项才能找到最有效的解决方案?
编辑
我最近被告知,就效率而言,临时表是一个很好的首选,因为它们具有相关的直方图即统计数据.
我有以下查询:
select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;
Run Code Online (Sandbox Code Playgroud)
会有什么区别,如果我更换了所有调用count(column_name)到count(*)?
这个问题的灵感来自于如何在Oracle中的表中找到重复值?.
为了澄清已接受的答案(也许是我的问题),替换count(column_name)为count(*)将在结果中返回一个额外的行,其中包含a null和null列中的值计数.
如何使用T-SQL更改表中的一个属性以允许空值(非null - > null)?可能会改变表吗?
我看到有些人使用语句来查询MySQL数据库中的表,如下所示:
select * from car_table where 1=1 and value="TOYOTA"
Run Code Online (Sandbox Code Playgroud)
但1=1这里的意思是什么?
我有一个以某种方式改变用户数据的存储过程.我传递给它user_id,它确实是这样的.我想在一个表上运行查询,然后对于每个user_id,我发现在该user_id上运行一次存储过程
我该怎么写这个查询?
我有很多记录,其中文本存储在MySQL的blob中.为了便于处理,我想将数据库中的格式更改为TEXT ...任何想法如何轻松地进行更改以便不中断数据 - 我想它需要正确编码?
如何从SQL Server的表中生成类?
我不是在谈论使用一些ORM.我只需要创建实体(简单类).就像是:
public class Person
{
public string Name { get;set; }
public string Phone { get;set; }
}
Run Code Online (Sandbox Code Playgroud) 我正在从SQLite切换到PostgreSQL,用于典型的Rails应用程序.
问题是PG的运行规格变得缓慢.
在SQLite上花了大约34秒,在PG上它是~76秒,这慢了2倍.
所以现在我想应用一些技术来使规范的性能与SQLite相提并论,而不需要修改代码(理想情况下只需设置连接选项,这可能是不可能的).
从头到尾有几件显而易见的事情是:
你可能已经明白我不关心可靠性和其余的(DB在这里只是一次性的东西).
我需要充分利用PG并尽可能快地完成它.
理想情况下,最佳答案将描述这样做的技巧,设置和这些技巧的弊端.
更新: fsync = off + full_page_writes = off仅将时间减少到~65秒(〜-16秒).良好的开端,但远远没有34的目标.
更新2:我尝试使用RAM磁盘,但性能增益在误差范围内.所以似乎不值得.
更新3:* 我找到了最大的瓶颈,现在我的规格和SQLite一样快.
问题是进行截断的数据库清理.显然SQLite在那里太快了.
为了"修复"它,我在每次测试之前打开一个事务并在结束时回滚它.
约700个测试的一些数字.
SQLite的速度提高了2倍.PG的速度提高4倍.
sql ×10
sql-server ×5
t-sql ×3
database ×2
mysql ×2
blobs ×1
c# ×1
linq ×1
performance ×1
postgresql ×1
subquery ×1