Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 server SQL Server在nvarchar字段上应用MAX和BETWEEN函数_Sql Server_Date_Max_Between_Nvarchar - Fatal编程技术网

Sql server SQL Server在nvarchar字段上应用MAX和BETWEEN函数

Sql server SQL Server在nvarchar字段上应用MAX和BETWEEN函数,sql-server,date,max,between,nvarchar,Sql Server,Date,Max,Between,Nvarchar,我们有一个运行在SQL Server 2000 DBMS上的数据库,日期和时间存储为nvarchar字段日期存储为shamsi日期,如“1393/02/24”,时间存储为“13:07”。应用程序很旧,查询在应用程序中硬编码,因此更改数据类型不是一个可行的选项。这些表格包含数十万条记录。 此系统上的示例查询如下所示: SELECT C1, C2, ... FROM tbl1 WHERE ReferenceDate = '1393/02/17' AND PrintDate IN (SELECT M

我们有一个运行在SQL Server 2000 DBMS上的数据库,日期和时间存储为nvarchar字段日期存储为shamsi日期,如“1393/02/24”,时间存储为“13:07”。应用程序很旧,查询在应用程序中硬编码,因此更改数据类型不是一个可行的选项。这些表格包含数十万条记录。 此系统上的示例查询如下所示:

SELECT C1, C2, ...
FROM tbl1 WHERE ReferenceDate = '1393/02/17' 
AND PrintDate IN (SELECT MAX(PrintDate) FROM tbl2 WHERE Code = tbl1.Code)
还有一些查询的PrintDate介于

这些查询深度低于6或7个连接级别,因此递归级别较高

查询也不是以最有效的方式编写的,但由于它们是硬编码的,并且应用程序是一个没有可用文档的遗留应用程序,因此从应用程序代码应用对查询的更改非常困难

现在的问题是,这个系统运行得非常慢,一些报告执行时间超过30秒,一些超时,大约90%的执行时间被保存为nvarchar的这些日期字段的排序操作和转换操作占用,我对这些字段应用了一些索引,但没有真正起到帮助


有什么方法可以提高这些查询的性能吗?将数据库移动到较新版本的SQL Server(如2012)是否会提高性能?

我执行以下操作以提高查询性能:

检查索引 如果需要,更新统计数据-与DBA讨论此问题 查看查询计划,特别是估计行数与实际行数 尝试使用执行相同作业的不同查询并出错。
我要尝试的第一件事是使用CTE或Temp表和索引,并使用JOIN而不是IN。

欢迎使用SO。如果存储为字符串的日期不理想,您可能会得到更有用的答案,但如果存储为'YYYY/MM/DD',则是次好的选择。正如Gabe所说,了解数据库的日期-时间数据类型并使用一个。然后索引它。