如何知道我们必须在SQL Server的表上应用索引的哪一列?

时间:2018-08-22 05:30:33

标签: sql-server sql-server-2008

假设我们的表包含100列。我想在该表上应用索引,如何确定我们必须应用索引的那些列?

3 个答案:

答案 0 :(得分:0)

首先,如果您的表有很多列,那么您可能做错了什么。

但是除了查询查询之外,根据经验,您还可以为查询的whereorder by子句中使用的列编制索引。

数据库需要查找或订购记录的所有信息都应建立索引。一般来说。

例如

select top 10 name, description 
from your_table
where status = 1 
order by date desc

对于此查询,应为statusdate两列建立索引。

答案 1 :(得分:0)

在表上创建索引取决于您要放置WHERE子句的列。

一旦您知道要用于WHERE子句的列,就可以在它们之上创建索引。

通常,数字列是索引的不错选择。

答案 2 :(得分:0)

此查询显示应使用SQL Server内部统计信息创建的缺少索引。另外,还要对每个要创建的索引进行一次分析。每个表创建的索引不要超过5-10。

SELECT TOP 25
    dm_mid.database_id AS DatabaseID,
    dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
    dm_migs.last_user_seek AS Last_User_Seek,
    OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
    'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
    + REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') 
    + CASE
    WHEN dm_mid.equality_columns IS NOT NULL
    AND dm_mid.inequality_columns IS NOT NULL THEN '_'
    ELSE ''
    END
    + REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
    + ']'
    + ' ON ' + dm_mid.statement
    + ' (' + ISNULL (dm_mid.equality_columns,'')
    + CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns 
    IS NOT NULL THEN ',' ELSE
    '' END
    + ISNULL (dm_mid.inequality_columns, '')
    + ')'
    + ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
    FROM sys.dm_db_missing_index_groups dm_mig
    INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
    ON dm_migs.group_handle = dm_mig.index_group_handle
    INNER JOIN sys.dm_db_missing_index_details dm_mid
    ON dm_mig.index_handle = dm_mid.index_handle
    WHERE dm_mid.database_ID = DB_ID()
    ORDER BY Avg_Estimated_Impact DESC

作者博客:https://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/