如何在PostgreSQL中查找丢失的数据库索引详细信息

时间:2019-08-02 13:15:57

标签: postgresql

我当时使用SQL Server,最近开始使用PostgreSQL。PostgreSQL中的数据库查询似乎很慢,因为它的表上没有很多索引,所以我想创建必要的索引。

在SQL Server中,我使用以下查询来确定受影响最大的索引.PostgreSQL中是否有这样的查询或方法来查找丢失的索引。我如何找到需要在表上创建哪些所有索引? / p>

使用DMV的SQL Server缺少索引查询

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
GO

1 个答案:

答案 0 :(得分:1)

我正在用a_horse_with_no_name的评论回答我自己的问题

“”“您需要解释一下凌乱的SQL实际做什么。它提取什么信息? Postgres中没有内置的建议丢失索引的方法,但是扩展名pg_qualstats可用于建议丢失索引的方法 “

使用pg_qualstats解决了这种情况。