Sql y使用尽可能少的空间;在执行查询时,它大大有助于减少磁盘搜索。比较较小的数据类型总是需要较少的时间

Sql y使用尽可能少的空间;在执行查询时,它大大有助于减少磁盘搜索。比较较小的数据类型总是需要较少的时间,sql,sql-server,select,sql-server-2008-r2,Sql,Sql Server,Select,Sql Server 2008 R2,可以对立柱进行以下调整: 使用不可为空的列(减少存储空间,减少测试次数) 以时间戳(无符号整数,4字节)而不是日期时间(8字节)的形式存储LogDate IP地址不应存储为NVARCHAR;如果您存储的是IPv4地址,4个字节就足够了(二进制(4))。IPv6支持需要18个字节(VARBINARY(16))。同时,NVARCHAR需要30字节用于IPv4,78字节用于IPv6。。。(在web上搜索inet_ntoa、inet_aton、inet_ntop、inet_pton,了解如何在地址的二

可以对立柱进行以下调整:

  • 使用不可为空的列(减少存储空间,减少测试次数)
  • 以时间戳(无符号整数,4字节)而不是日期时间(8字节)的形式存储
    LogDate
  • IP
    地址不应存储为NVARCHAR;如果您存储的是IPv4地址,4个字节就足够了(二进制(4))。IPv6支持需要18个字节(VARBINARY(16))。同时,NVARCHAR需要30字节用于IPv4,78字节用于IPv6。。。(在web上搜索inet_ntoa、inet_aton、inet_ntop、inet_pton,了解如何在地址的二进制和字符串表示之间切换)
  • 不要将相似的数据存储在两个单独的表中,而是添加一个BIT类型的
    Restorable
    标志列,指示是否可以恢复日志条目
  • 关于
    Info
    列的想法是正确的:最好使用TEXT或NTEXT数据类型
  • <> LI>而不是使用NVARCHAR类型为 Actudio,可以考虑使用包含所有可能的动作(假设它们是有限数)的“<代码>动作< /代码>表,并用一个整数外键引用它们(较小的int,更好)
索引优化也非常重要。如果查询同时测试多个列,请对多个列使用索引。例如,如果在一定时间范围内选择与特定IP对应的所有可恢复行,这将大大提高查询速度:

CREATE NONCLUSTERED INDEX IX_IndexName ON log (Restorable ASC, IP ASC, LogDate ASC)
如果需要在给定的时间范围内从对应于特定操作的IP地址检索所有可恢复行,则应选择如下索引:

CREATE NONCLUSTERED INDEX IX_IndexName ON log (IP ASC, Action ASC, LogDate ASC)
等等


老实说,为了进行适当的优化,我实际上需要查看完整的SQL查询…

一般来说,应该尽可能少地使用空间;在执行查询时,它大大有助于减少磁盘搜索。比较较小的数据类型总是需要较少的时间

可以对立柱进行以下调整:

  • 使用不可为空的列(减少存储空间,减少测试次数)
  • 以时间戳(无符号整数,4字节)而不是日期时间(8字节)的形式存储
    LogDate
  • IP
    地址不应存储为NVARCHAR;如果您存储的是IPv4地址,4个字节就足够了(二进制(4))。IPv6支持需要18个字节(VARBINARY(16))。同时,NVARCHAR需要30字节用于IPv4,78字节用于IPv6。。。(在web上搜索inet_ntoa、inet_aton、inet_ntop、inet_pton,了解如何在地址的二进制和字符串表示之间切换)
  • 不要将相似的数据存储在两个单独的表中,而是添加一个BIT类型的
    Restorable
    标志列,指示是否可以恢复日志条目
  • 关于
    Info
    列的想法是正确的:最好使用TEXT或NTEXT数据类型
  • <> LI>而不是使用NVARCHAR类型为 Actudio,可以考虑使用包含所有可能的动作(假设它们是有限数)的“<代码>动作< /代码>表,并用一个整数外键引用它们(较小的int,更好)
索引优化也非常重要。如果查询同时测试多个列,请对多个列使用索引。例如,如果在一定时间范围内选择与特定IP对应的所有可恢复行,这将大大提高查询速度:

CREATE NONCLUSTERED INDEX IX_IndexName ON log (Restorable ASC, IP ASC, LogDate ASC)
如果需要在给定的时间范围内从对应于特定操作的IP地址检索所有可恢复行,则应选择如下索引:

CREATE NONCLUSTERED INDEX IX_IndexName ON log (IP ASC, Action ASC, LogDate ASC)
等等


老实说,为了进行适当的优化,我实际上需要查看完整的SQL查询…

首先要担心的是机器的内存,服务器有多少内存?然后,您应该与您的数据库大小进行比较,或者只是与您正在处理的表的大小进行比较。如果内存与表的大小相比太小,那么您必须向服务器添加更多内存。这是你要做的第一件事


您首先要担心的是机器的内存,服务器有多少内存?然后,您应该与您的数据库大小进行比较,或者只是与您正在处理的表的大小进行比较。如果内存与表的大小相比太小,那么您必须向服务器添加更多内存。这是你要做的第一件事


您可以共享您的SQL吗?您可以共享您的SQL吗?注意:
Varchar(MAX)
也是LOB数据类型。使用该数据类型而不是
XML
datatype不会有任何帮助,可能会使某些事情变得更糟。您确定您的索引/统计数据是最新的吗?最近是否重新编译SP?索引上有碎片吗?我注意到您正在使用UNIQUEIDENTIFIER作为主键。这是一个非顺序的GUID,可能会导致性能问题。您是否尝试分析sp?@rbaryyoung查看此链接:。SQL Server似乎在行中存储VARCHAR(MAX),如果它适合8kb。@stoleg:是的,XML列和所有“新”大型对象类型也是如此。这包括SQL Server 2005或更高版本中添加的类型:
Varchar(MAX)、NVarchar(MAX)、Varbinary(MAX)、XML
,等等。我不认为旧的/不推荐的LOB(
Text、NText、Image
)注意:John Conwell没有提到他的文章的是,这可以通过使用
sp_tableoption
来控制。注意:
Varchar(MAX)
也是一种LOB数据类型。使用该数据类型而不是
XML
datatype不会有任何帮助,并且可能会产生一些问题