在我的应用程序中,我有一个在“文件”表中执行搜索的查询。
表“files”由“f”.“created”分区(参见表定义,客户端19(“f”.“cid = 19)有大约2600万行)。
这里的重点是,如果我执行此查询:
SELECT "f"."id" AS "FileId"
, "f"."name" AS "FileName"
, "f"."year" AS "Fileyear"
, "f"."cid" AS "clientId"
, "f"."created" AS "FileDate"
, CASE WHEN ("vnVE0"."value" is not null AND "vnVE0"."value" != '')
THEN CAST("vnVE0"."value" AS decimal(28,2))
ELSE 0 END AS "keywordValueCol0_numeric"
FROM files "f"
OUTER APPLY
(
SELECT DISTINCT
VT.[value]
FROM dbo.value_number AS VT
WHERE
VT.id_file = F.id
AND VT.id_field = 260
) AS "vnVE0"
WHERE "grapado" IS NULL AND "masterversion" IS NULL AND ("f"."year" = …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我必须连接数百万行的表。我有一个这样的查询:
SELECT DISTINCT "f"."id" AS "FileId"
, "f"."name" AS "FileName"
, "f"."year" AS "FileYear"
, "vt"."value" AS "value"
FROM files "f"
JOIN "clients" "cl" ON("f"."cid" = "cl"."id" AND "cl"."id" = 10)
LEFT JOIN "value_text" "vt" ON ("f"."id" = "vt"."id_file" AND "vt"."id_field" = 65739)
GROUP BY "f"."id", "f"."name", "f"."year", "vt"."value"
Run Code Online (Sandbox Code Playgroud)
表“files”有1000万行,表“value_text”有4000万行。
这个查询太慢了,执行需要 40 秒(15000 个结果) - 3 分钟(65000 个结果)。
我曾想过将两个查询分开,但我不能,因为有时我需要按连接的列(值)排序...
我能做什么?我将 SQL Server 与 Azure 结合使用。具体而言,具有定价/模型层“PRS1 PremiumRS (125 DTU)”的 Azure SQL 数据库。
我收到了大量数据,但我认为互联网连接不是瓶颈,因为在其他查询中,我也收到了大量数据,而且速度更快。
我尝试使用客户端表作为子查询并DISTINCT
使用相同的结果进行删除。
我在客户端表中有 1428 行。 …
在我的应用程序中,我有一个在“文件”表中执行搜索的查询。
该表files
按f.created
(参见表定义)进行分区,并为客户端 19 ( f.cid = 19
)提供约 1 亿行。
我正在使用我上一个问题的答案中的这个查询, SQL Server 的慢顺序:
WITH PartitionNumbers AS
(
-- Each partition of the table
SELECT P.partition_number
FROM sys.partitions AS P
WHERE P.[object_id] = OBJECT_ID(N'dbo.files', N'U')
AND P.index_id = 1
)
SELECT
FF.id,
FF.[name],
FF.[year],
FF.cid,
FF.created,
vnVE0.keywordValueCol0_numeric
FROM PartitionNumbers AS PN
CROSS APPLY
(
SELECT
F100.*
FROM
(
-- 50 rows in order for year 2013
SELECT
F.id,
F.[name],
F.[year],
F.cid,
F.created
FROM dbo.files …
Run Code Online (Sandbox Code Playgroud)