Sql server 如何知道在SQL Server中,我们必须对表的哪个列应用索引?
假设我们有一个包含100列的表。我想在该表上应用索引,如何确定我们必须应用索引的列?首先,如果表中有这么多列,那么可能是做错了什么 但除此之外,请查看您的查询,并根据经验为查询的Sql server 如何知道在SQL Server中,我们必须对表的哪个列应用索引?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,假设我们有一个包含100列的表。我想在该表上应用索引,如何确定我们必须应用索引的列?首先,如果表中有这么多列,那么可能是做错了什么 但除此之外,请查看您的查询,并根据经验为查询的where和order by子句中使用的列编制索引 数据库查找或订购记录所需的所有信息都应编入索引。一般来说 比如说 select top 10 name, description from your_table where status = 1 order by date desc 对于此查询,应为两列状态和日期
where
和order by
子句中使用的列编制索引
数据库查找或订购记录所需的所有信息都应编入索引。一般来说
比如说
select top 10 name, description
from your_table
where status = 1
order by date desc
对于此查询,应为两列
状态
和日期
编制索引。在表上创建索引取决于要放置WHERE子句的列
一旦您能够知道要用于WHERE子句的列,您就可以在这些列上创建索引
通常,数字列是索引的最佳选择。此查询显示应使用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
作者博客:这取决于很多因素。在您的表上执行什么类型的查询?多久?数据修改的频率?如何修改数据-仅插入,或/和更新和删除?主键定义是什么?我的建议是放弃寻找简单的解决办法。你需要读很多书才能做出正确的决定。检查这篇文章,不要太快-