SQL Server查询速度慢,数据库较小



我有两个表:

  1. asset -与id_asset,名称,股票(60k行)
  2. quote_close - with id_asset, refdate, quote_close (22MM行)

我想在name和ticker中创建一个过滤器,并返回:

  • id_asset
  • <
  • 名称/gh>
  • 股票
  • id_asset
  • min(refdate)
  • id_asset的max(refdate)
  • quote_close on max(refdate) of id_asset

我写了这个查询:

WITH tableAssetFiltered AS
(
    SELECT 
        id_asset, ticker, name
    FROM 
        asset
    WHERE 
        ticker LIKE ('%VALE%') AND name LIKE ('%PUT%')
)
SELECT 
    ast.id_asset, ast.ticker, ast.name, 
    xx.quote_close as LastQuote, xx.MinDate, 
    xx.refdate as LastDate 
FROM
    tableAssetFiltered ast
LEFT JOIN
    (SELECT 
         qc.id_asset, qc.refdate, qc.quote_close, tm.MinDate 
     FROM 
         quote_close qc 
     INNER JOIN 
         (SELECT 
              t.id_asset, max(t.refdate) as MaxDate, min(t.refdate) as MinDate 
          FROM 
              (SELECT 
                   qc.id_asset, qc.refdate, qc.quote_close 
               FROM 
                   quote_close qc
               WHERE 
                   qc.id_asset IN (SELECT id_asset
                                   FROM tableAssetFiltered)
              ) t 
          GROUP BY 
              t.id_asset) tm ON qc.id_asset = tm.id_asset 
                             AND qc.refdate = tm.MaxDate 
    ) xx ON xx.id_asset = ast.id_asset
ORDER BY 
    ast.ticker

在名称和代码中使用不同过滤器的结果如下:

  • ticker like ('%VALE%') AND name like ('%PUT%')00:02:28返回491行
  • 对于name like ('%PUT%'),它需要00:00:02并返回16697行
  • 使用ticker like ('%VALE%'),它占用00:00:02并返回1102行
  • 没有点赞,它花费了00:00:03并返回51847行

我不明白的是这个查询

SELECT id_asset,ticker, name
FROM Viper.dbo.asset
WHERE ticker like ('%VALE%') AND name like ('%PUT%')

运行时间为00:00:00。

为什么一个较小的表需要更多的时间来运行?有什么办法能让它更快吗?

速度慢可能是由很多因素引起的,硬件、网络、缓存等。

为了使查询更快,1. 确保在ticker上有一个索引。
2. 在表上运行update statistics。
3.尝试找到一种方法来删除字符串开头的"%"。这是可以的:'VALE%''%VALE'

最新更新