查询在运行时间较长的地方失败(仅在php下的mssql server 2005)

baron_bartek

我有一个奇怪的问题。

我正在运行一个查询:

SELECT IMIE, NAZWISKO, PESEL2, ADD_DATE, CONVERT(varchar, ADD_DATE, 121) AS XDATA, ID_ZLECENIA_XXX, * FROM XXX_KONWERSJE_HISTORIA AS EKH1
INNER JOIN XXX_DANE_PACJENTA EDP1 ON EKH1.ID_ZLECENIA_XXX=EDP1.ORDER_ID_XXX
WHERE EKH1.ID_KONWERSJE = (
    SELECT MIN(ID_KONWERSJE)
    FROM XXX_KONWERSJE_HISTORIA AS EKH2
    WHERE EKH1.ID_ZLECENIA_XXX = EKH2.ID_ZLECENIA_XXX
)
AND EDP1.RECNO = ( 
    SELECT MAX(RECNO) 
    FROM XXX_DANE_PACJENTA EDP2
    WHERE EDP2.ORDER_ID_XXX = EDP1.ORDER_ID_XXX
)
AND EKH1.ID_ZLECENIA_XXX LIKE '%140000393%'
AND ADD_DATE>'20140419' AND ADD_DATE<='20140621 23:59:59.999' 
ORDER BY EKH1.ID_KONWERSJE, EKH1.ID_ZLECENIA_XXX DESC 

如果我使用2个月左右的日期限制(63天-它给我1015个结果),则查询正常。如果我延长日期限制,查询只会失败(查询失败等等)。

这是在Windows 64位php(Apache,Xamp)下发生的。

当我直接从MS SQL SERWER Management Studio运行此查询时,无论我选择什么日期限制,一切都可以正常工作。

到底是怎么回事?在apache / php下有某种限制吗?(没有“查询时间超出”之类的信息,只有“查询失败”之类的信息)

博格丹·萨林(Bogdan Sahlean)

如果我使用2个月左右的日期限制(63天-它给我1015个结果),则查询正常。如果我延长日期限制,查询只会失败(查询失败等等)。... 到底是怎么回事?在apache / php下有某种限制吗?(没有“查询时间超出”之类的信息,只有“查询失败”之类的信息)

之所以会发生这种情况,ADD_DATE>'20140419' AND ADD_DATE<='20140621 23:59:59.999'因为的选择性中等/低(满足该谓词的行太多)并且SQL Server必须扫描(是,扫描)XXX_KONWERSJE_HISTORIA很多次才能检查以下谓词:

WHERE EKH1.ID_KONWERSJE = (
    SELECT ...
    FROM XXX_KONWERSJE_HISTORIA AS EKH2
    WHERE EKH1.ID_ZLECENIA_XXX = EKH2.ID_ZLECENIA_XXX
)

必须扫描SQL ServerXXX_KONWERSJE_HISTORIA多少次才能验证此谓词?您可以查看Table Scan [XXX_KONWERSJE_HISTORIA]数据访问运算符的属性:3917次在此处输入图片说明

您一开始可以做什么?您应该创建丢失的索引(请参阅执行计划上方带有绿色的警告):

USE [OptimedMain]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[ERLAB_KONWERSJE_HISTORIA] ([ID_ZLECENIA_ERLAB])
INCLUDE ([ID_KONWERSJE])
GO

当我直接从MS SQL SERWER Management Studio运行此查询时,无论我选择什么日期限制,一切都可以正常工作。

默认情况下,SQL Server Management Studio的执行超时设置为0(无执行超时)。

注意:如果此索引可以解决问题,则应尝试(1)在ADD_DATE所有必需的(CREATE INDEX ... INCLUDE(...))列上创建索引,以及(2)在这些表上创建唯一的聚集索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server 2005 查询帮助(分组依据)

执行递归SQL查询(SQL Server 2005)

检索SQL Server(2005)中记录的日期时间的时区

从SQL Server 2005中的列中获取查询的xml节点

有效的SQL Server 2005查询优化

使用位数据类型列查询Sql Server 2005

使用查询SQL Server 2005选择DATEADD分钟

为什么SQL Server Management Studio 2005在运行'select @@ version'时显示版本2012

SQL Server 2005查询使用?在SQL Server 2012中不起作用

如何在SQL SERVER 2005中生成查询,该查询给出类似Matrix的输出?

使用jdts驱动程序从hdfs到SQL Server 2005的Sqoop导出失败

将数据类型nvarchar转换为日期时间SQL SERVER 2005时出错

如何在不安装SQL Server 2005的情况下测试语法

如何在按子句SQL Server 2005中使用子查询

有没有办法查看Sql Server 2005中最近的昂贵查询?

带有左连接的 SQL Server 2005 更新查询不起作用

每个月的SQL Server 2005 GROUP BY和COUNT个查询

如何在不循环或游标在SQL Server 2005中更新此查询

子查询返回了 1 个以上的值。在 SQL Server 2005 中

使用php在一列(SQL Server 2005或更高版本)上选择DISTINCT

从DateTime中提取小时(SQL Server 2005)

SQL Server 2005中的PIVOT语句

5天滚动返回SQL Server 2005

在 SQL Server 2005 上执行 SSIS 包

使用变量作为xquery sql server 2005

根据先前的值更新SQL SERVER 2005

SQL Server 2005与Windows 10不兼容

枢纽或取消枢纽SQL Server2005

在SQL Server 2005中检索层次结构