Taille de la table 32Go compte Ligne 250MComment améliorer les performances des requêtes SQL Server
Tableau LDD
CREATE TABLE Orders
(
ID [int] IDENTITY(1,1) NOT NULL,
server [varchar](50) NULL,
server_id [int] NOT NULL,
merchant_id [int] NOT NULL,
order_id [int] NOT NULL,
customer_id [int] NOT NULL,
customer_name [varchar](50) NULL,
[amount] [money] NULL,
order_date [smalldatetime] NULL,
ship_date [smalldatetime] NULL,
order_status [varchar](50) NULL,
custom_field_1 [varchar](50) NULL,
custom_field_2 [varchar](50) NULL,
custom_field_3 [varchar](50) NULL,
custom_field_4 [varchar](50) NULL,
created_at [datetime] NULL
CONSTRAINT [PK_Orders]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Je suit index non cluster
merchant_id, order_id
order_date
Logiquement, le order_id
, merchant_id
faire une clé unique.
requête simple comme ci-dessous prend près de 30 minutes.
select
sum(amount)
from
Orders
where
Order_Date >= getdate() - 7
J'ai quelques questions:
- est le PK droit? Actuellement, il est sur le champ d'identification et il n'est pas utilisé pour quoi que ce soit.
- Est-ce que faire
order_id
etmerchant_id
comme aide PK dans la performance? - Quels sont les indices idéaux que je devrais avoir sur cette table?
vous devriez créer un index sur 'Order_Date', encore mieux s'il contient' amount' – Lamak
Quel est le plan de requête? – Paurian
En notant la taille de votre table et le nombre de lignes, vous voudrez probablement prendre ce que SqlZim a suggéré et reconstruire les index périodiquement en fonction de la quantité de trafic écrivant à cette table pour réduire la fragmentation. – Paurian