简体   繁体   中英

SQL Server Query Slow with Smaller Database

I have 2 tables:

  1. asset - with id_asset, name, ticker (60k rows)
  2. quote_close - with id_asset, refdate, quote_close (22MM rows)

I want to make a filter in name and ticker and return:

  • id_asset
  • name
  • ticker
  • min(refdate) of the id_asset
  • max(refdate) of the id_asset
  • quote_close on max(refdate) of the id_asset

I wrote this query:

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

The results with different filter in name and ticker are:

  • With ticker like ('%VALE%') AND name like ('%PUT%') it took 00:02:28 and returns 491 rows
  • With name like ('%PUT%') it took 00:00:02 and returns 16697 rows
  • With ticker like ('%VALE%') it took 00:00:02 and returns 1102 rows
  • With no likes it took 00:00:03 and returns 51847 rows

What I can't understand is that the query

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

took 00:00:00 to run.

Why does a smaller table took more time to run? Any solution to make it faster?

The slowness could be caused by many things, Hardware, network, caching, etc.

To make the query faster, 1. Make sure that there is an index on ticker.
2. Run update statistics on the table.
3. Try to find a way to remove the '%' at the beginning of the string. This is okay: 'VALE%' This will slow down your query: '%VALE'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM