Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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/7/sql-server/22.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_Sql Server - Fatal编程技术网

Sql 创建包含频繁更改的字段的索引是个坏主意吗?

Sql 创建包含频繁更改的字段的索引是个坏主意吗?,sql,sql-server,Sql,Sql Server,我需要防止在大表上进行表扫描,其中记录搜索基于三个字段,其中一个字段可能会更新。 搜索查询如下所示: select blabla from ttg_transaction where uti = ? and txn_type = ? and state = ? 想到的索引(不是唯一的,不是聚集的)是上面的三个字段。但尽管前两个是常数,但“状态”在记录的生命周期中确实会发生变化 这是从索引中排除“状态”的一个好理由吗?这是一个坏主意 如果存储速度慢(旋转的金属磁盘) 如果数据类型较大(TEXT

我需要防止在大表上进行表扫描,其中记录搜索基于三个字段,其中一个字段可能会更新。 搜索查询如下所示:

select blabla from ttg_transaction where uti = ? and txn_type = ? and state = ?
想到的索引(不是唯一的,不是聚集的)是上面的三个字段。但尽管前两个是常数,但“状态”在记录的生命周期中确实会发生变化


这是从索引中排除“状态”的一个好理由吗?

这是一个坏主意

  • 如果存储速度慢(旋转的金属磁盘)
  • 如果数据类型较大(TEXT/NTEXT、VARBINARY、XML等)
  • 高频更新
或者这些的组合

假设你的存储速度很快,我就不会太担心了。如果您的存储速度仍然很慢,您可以

  • 配置insert/update语句
  • 创建索引
  • 创建索引时配置insert/update语句
  • 比较结果
您可以使用
设置统计IO ON
和/或
设置统计时间ON


要处理索引碎片,您可以指定一个对您的案例有意义的索引



如果状态为随机文本字段,这也可能会干扰您的统计数据,但您没有指定。

谢谢您的回答。“state”的数据类型是int,所以不是很大,频率也不是很高。我相信硬件是好的,但我得确认一下。因此,道路是开放的,可以使用所有三个字段创建索引,并按照您的建议对其进行配置。填充因子对于该索引和其他索引也是很好的了解-这是一个商业应用,需要像闪电一样快。再次感谢