优化SQL Server

时间:2015-07-23 08:53:59

标签: sql-server tsql

我有这个问题:

SELECT 
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[SOCIETE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DATE_COMPTABILISATION],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[TYPE_DOCUMENT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[NUM_DOCUMENT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DESIGNATION],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[CODE_JOURNAL],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[MONTANT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[MONTANT_DEBIT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[MONTANT_CREDIT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[TYPE_ORIGINE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[NUM_ORIGINE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[MONTANT_TVA],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[GROUPE_COMPTA_PRODUIT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[GROUPE_COMPTA_MARCHE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[LETTRE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[TYPE_COMPTA_TVA],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[NUM_TRANSACTION],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[NUM_SEQUENCE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[NUM_COMPTE],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[GROUPE_COMPTA_MARCHE_TVA],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[GROUPE_COMPTA_PRODUIT_TVA],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[CODE_BUDGET],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[ID],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[Dimension Value Code],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[CENTRE_COUT],
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[TYPE_COMPTE],
    CODE_TS
FROM 
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE] WITH(INDEX(DATE))
WHERE 
    [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DATE_COMPTABILISATION] >='01/05/2014' 
AND [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DATE_COMPTABILISATION] < '01/06/2014'

查询工作正常,但速度太慢。有没有办法优化查询执行时间?

1 个答案:

答案 0 :(得分:0)

查询并不复杂,但至少有一种方法可以优化它。

当你比较不同类型的数据时,sql server会在每次检查时一直转换它。您应该使用select distinct p1.name,p1.article from products p1 where exists( select 1 from products p2 where p2.article = p1.article and p2.name <> p1.name ) CAST提前一次执行转换:

CONVERT

我在此示例中使用了... WHERE [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DATE_COMPTABILISATION] >= CONVERT('01/05/2014', DATETIME2(7), 103) AND [dbo].[T_COMPTA_ECRITURE_COMPTABLE].[DATE_COMPTABILISATION] < CONVERT('01/06/2014', DATETIME2(7), 103) - 您更喜欢DATETIME2(7)列所具有的相同类型。 DATE_COMPTABILISATION参数的103值是CONVERT格式。有关here的更多信息。