Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL隐藏技术?_Sql_Mysql_Sql Server_Postgresql - Fatal编程技术网

SQL隐藏技术?

SQL隐藏技术?,sql,mysql,sql-server,postgresql,Sql,Mysql,Sql Server,Postgresql,可能重复: SQL提供了哪些专业/微妙的技术,而很少有人知道哪些技术也可以减少代码并提高性能 我刚刚学会了如何在聚合函数中使用CASE语句,这完全改变了我的方法 还有其他的吗 更新:基本上是任何供应商。但是PostgreSQL如果您只想关注一个:DSQL GROUP BY- 分析AKA排名,AKA窗口功能,即: 行号 等级 密秩 安提尔 结束 视图:正常和物化 如果不参考特定于供应商的语法,就很难说什么人们没有充分使用内置函数,并且喜欢重新发明轮子,以下是 在集群的uniqueidentifi

可能重复:

SQL提供了哪些专业/微妙的技术,而很少有人知道哪些技术也可以减少代码并提高性能

我刚刚学会了如何在聚合函数中使用CASE语句,这完全改变了我的方法

还有其他的吗

更新:基本上是任何供应商。但是PostgreSQL如果您只想关注一个:D

SQL GROUP BY-

分析AKA排名,AKA窗口功能,即:

行号 等级 密秩 安提尔 结束 视图:正常和物化


如果不参考特定于供应商的语法,就很难说什么

人们没有充分使用内置函数,并且喜欢重新发明轮子,以下是

在集群的uniqueidentifier列上使用NEWSEQUENTIALID而不是NEWID将执行得更好,因为它不会导致页面拆分和碎片

使用辅助的数字表,以便您可以快速执行一些基于集合的逻辑

比如说

select DATEADD(m,number,'20010101')
from master..spt_values
where type = 'P'
order by 1
任何、全部和部分

SQL Server a.k.a.PostgreSQL或Oracle

我很高兴知道这件事。你可以做各种各样的方便的事情,比如计数、分区、排名等等。

最近我用了很多

在挑出不同的行或公共行时非常有用且效率令人不安,这适用于集合之间行中的所有列。当您有很多列时,这非常有用

这是2005年的新版本,我知道那是很久以前的事了,但是很多人仍然在使用2000。 当name='tim'然后value else 0结束构建聚合时,省去了大量的case操作。

。我很惊讶有多少人在检查存在或选择时仍然使用COUNT*。。。存在的子句可以更快地完成这项工作

最常见的情况是:

SELECT @MyVar = Count(*) FROM Table1 WHERE....
If @MyVar <> 0
BEGIN
   --do something
END

总是更好。

在MySQL下,使用关键字STRAIGHT\u JOIN。如果您知道自己的数据以及要加入的查找表之间的关系,有时优化器会将较小的表视为加入的基础,并尝试将较少的记录计数查询到较大的表中,从而占用更多的时间。如果您的主表在from中是第一个,并且它的条件在前面,那么直接连接将首先命中该表,然后连接到其余的表,并立即完成


我不得不处理1000多万条记录的政府数据,这些记录与大约15+个查找表连接在一起。如果没有直接连接,系统将在20多个小时后阻塞。添加直接连接大约需要2小时。

来自Postgresql的两个:参见示例和新的。

在Sql Server中,HAVING子句。特别是,让ingCount DISTINCT FOO>@SomeNumber快速查找给定分组中具有多个不同值的行

发件人:

从PostgreSQL文档:

分区是指将逻辑上的一个大表拆分为更小的物理部分。分区可以提供几个好处:

对于某些类型的查询,可以显著提高查询性能

更新性能也可以提高,因为表的每一部分的索引都小于整个数据集上的索引。当索引不再容易放入内存时,索引上的读写操作都会占用越来越多的磁盘访问

如果分区设计中计划了该需求,则只需删除一个分区即可完成批量删除。DROP TABLE比批量删除快得多,更不用说随之而来的真空开销了

很少使用的数据可以迁移到更便宜、速度更慢的存储介质


用于创建变量和减少重复代码的派生表

类似这样的东西,但可以扩展。显然,平均值可能是一个复杂得多的计算,如果您有几个,它有助于清理代码

Select *, case when AverageValue > 50 then 'Pass' Else 'Fail' end
From
(
 Select ColA, ColB, AverageValue = (ColA+ColB)/2
 From InnerMostTable
) AverageValues
Order By AverageValue Desc

公共表表达式SQL Server 2005+

WITH x AS (
    SELECT 1 as A, 2 as B, 3 as C
),
WITH y AS (
    SELECT 4 as A, 5 as B, 6 as C
    UNION
    SELECT 7 as A, 8 as B, 9 as C
)
SELECT A, B, C FROM x
UNION
SELECT A, B, C FROM y

在SQL Server中,使用Convert函数而不是Cast函数以mm/dd/yyyy格式获取日期,将查询分解为多个步骤,这非常好

SELECT convert(datetime,  '1/1/2010', 101)

我一直使用这个

排名函数非常有用。我很久没有使用过任何/all/SOME,使用join。第三项通常被称为使用理货表,对于查找序列中的空白非常有用。人们真的不知道GETUTCDATE吗?PostgreSQL窗口函数也是如此,语法基本相同。似乎是我最近回答的一半sql问题的答案…标记为的副本-将其扩展到所有平台只会将其进一步归入主观/NARQ类别。请阅读更新。我也在寻找常见的漂亮的sql技术。就像我的示例中适用于所有RDBMSes的一样,连接和聚合不是比使用子查询更好吗DOuter联接通常比不存在的联接要快,至少在SQLServer2000中是这样,除非集合不满足存在条件
谓词比表小得多。但是,总体性能将在很大程度上取决于查询优化程序是否正确地执行查询—在大多数情况下可能会这样做。在这种情况下,如果EXISTS使查询更清晰,则可能会更好。SQL Server 2005+、Oracle 11g+支持PIVOT/UNPIVOT。我相信是ANSI。CASE得到了更广泛的支持,为了便于携带,我更喜欢它而不是PIVOT.dude这些是kick@$$:D+1 clearlysee leonbloy的答案。更加优雅。
USE AdventureWorks2008R2 ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING SUM(LineTotal) > 100000.00
ORDER BY SalesOrderID ;
Select *, case when AverageValue > 50 then 'Pass' Else 'Fail' end
From
(
 Select ColA, ColB, AverageValue = (ColA+ColB)/2
 From InnerMostTable
) AverageValues
Order By AverageValue Desc
WITH x AS (
    SELECT 1 as A, 2 as B, 3 as C
),
WITH y AS (
    SELECT 4 as A, 5 as B, 6 as C
    UNION
    SELECT 7 as A, 8 as B, 9 as C
)
SELECT A, B, C FROM x
UNION
SELECT A, B, C FROM y
SELECT convert(datetime,  '1/1/2010', 101)