我应该删除假设索引吗?

时间:2014-01-14 11:03:41

标签: tsql sql-server-2012 database-tuning-advisor

我注意到某个数据库中存在假设索引。我一直在搜索,似乎这种类型的索引是由Tuning Advisor创建的,并不总是被删除。

有几个主题,包括如何清除/删除这些索引的official文档,但我无法找到这些索引是否对服务器本身产生任何影响。

我使用下面的脚本检查的是没有关于它们的大小信息:

SELECT OBJECT_NAME(I.[object_id]) AS TableName
      ,I.[name] AS IndexName
      ,I.[index_id] AS IndexID
      ,8 * SUM(A.[used_pages]) AS 'Indexsize(KB)'
FROM [sys].[indexes] AS I
INNER JOIN [sys].[partitions] AS P 
    ON P.[object_id] = I.[object_id] 
    AND P.[index_id] = I.[index_id]
INNER JOIN [sys].[allocation_units] AS A 
    ON A.[container_id] = P.[partition_id]
WHERE I.[is_hypothetical] = 1
GROUP BY I.[object_id]
        ,I.[index_id]
        ,I.[name]
ORDER BY 8 * SUM(A.[used_pages]) DESC

并且拥有它们,我已经决定检查是否有一些关于它们的使用信息,以便留下经常使用的这些,但是再没有任何回报。 (我使用了this article)中的“现有索引使用统计信息”。

有人能告诉我们为什么要保留这些索引是错误的,如果我可以定义应该保留哪些索引?

2 个答案:

答案 0 :(得分:3)

只是删除它们,它们实际上并没有占用任何空间或导致任何性能损失/利益,但是如果您正在查看在表上定义了哪些索引而忘记排除假设索引,则可能会导致一些混乱,也是在您尝试创建与这些索引之一具有相同名称的索引的情况下,它将失败,因为它已经存在。

答案 1 :(得分:0)

如果您使用自定义架构并选中了分析索引视图,则需要对上述脚本进行一些进一步的改进:

    <template>
      <div>
        <navbar></navbar>
        <sub-nav></sub-nav>
        <filter-section></filter-section>
        <section class="shoes">
          <shoe></shoe>
        </section>
      </div>
    </template>

    <script>
    import Navbar from "../components/Navbar.vue";
    import SubNav from "../components/SubNav.vue";
    import FilterSection from "../components/FilterSection.vue";
    import Shoe from "../components/Shoe.vue";

    export default {
      components: {
        Navbar,
        SubNav,
        FilterSection,
        Shoe
      }
    };
    </script>

    <style lang="scss" scoped>
    @import "../sass/views/men";
    </style>