【问题标题】:What indexes will I need to make on this SQL Server table?我需要在这个 SQL Server 表上创建哪些索引?
【发布时间】:2010-10-07 23:24:14
【问题描述】:

我对 SQL Server 2008 数据库有以下 sql 查询。

SELECT TOP(@NumberOfStreetResults) LocationType, LocationId, Name
FROM [dbo].[LocationNames] 
WHERE CONTAINS(Name, @SearchQuery)
    AND LocationType = 7

注意我是如何使用CONTAINS 关键字的?我在Name 字段上有一个FTS

我不确定需要手动将哪些索引添加到表中,因为此查询在我们的系统中非常常见。

我只需要针对LocationType 添加一个索引吗?

更新

这是查询图...

【问题讨论】:

  • 我会分析查询(通过数据库引擎优化顾问),看看进一步的索引是否会提高性能。
  • 您可能会喜欢Use the Index, Luke!这个网站——它旨在为开发人员提供数据库性能指南。

标签: sql-server sql-server-2008 full-text-search indexing


【解决方案1】:

如果您的 LocationType 具有高度选择性,那么我的建议是在该表上创建一个覆盖索引,键为 LocationType,并在您的包含列列表中添加 LocationId

【讨论】:

    【解决方案2】:

    简单地说,索引是 SQL 中的一个临时表,它保存已排序的索引列的副本。当插入新行时,SQL 会将新记录放入临时表中的正确位置,因此索引具有以下结果:

    A) 优点:

    1) 提高搜索速度,因为表是基于索引字段在临时表中排序的

    B) 缺点:

    1) 减慢 CRUD(创建、读取、更新、删除),因为如果需要,应该对临时表执行相同的操作。

    2) 使用临时表会增加数据库大小。

    结论:

    在您经常将它们称为搜索条件 (WHERE) 的字段上使用索引

    【讨论】:

    • 这适用于一般情况;这个特定的实例呢?
    • 太笼统了,无法回答。这个问题非常具体,需要一个非常具体的答案。
    • 同意 - 这是关于 Index's 的通用答案 .. 我有点了解。很好的尝试伙伴,欢迎来到 StackOverflow。你能试着对我的问题更具体一点吗?
    • 我只是试图帮助澄清权衡。所以回答他的问题“我需要添加一个针对 LocationType 的索引吗?”正如我提到的,取决于他写了多少这个查询“WHERE LocationType ...”。作为一个具体的答案(猜测它是一个中小型项目),使用“LocationType”或任何您怀疑的文件上的索引。
    猜你喜欢
    • 1970-01-01
    • 2019-03-08
    • 2018-08-07
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多