現在、約16Kのレコードを取得するこれがあります:
DECLARE @LINE_ID INT
SET @LINE_ID = 37
SELECT
a.eventType as 'evento',
a.tipo as 'tipo',
a.nroSoldadura as 'nro soldadura',
a.cuentaOdometrica as 'Distancia Absoluta [m]',
a.x as 'x',
a.y as 'y',
a.z as 'z',
a.zonaGeografica as 'Zona geografica',
a.orientacionSoldadura as 'orientacion',
a.prof * 100 as 'prof maxima [%]',
a.longitud as 'long. [mm]',
a.ancho as 'ancho [mm]',
a.IntExt as 'INT o EXT',
a.cluster as 'Cluster',
a.espesorPared as 'espesor de pared nominal',
a.longitudEfectiva as 'longitud efectiva',
a.anchoEfectivo as 'Ancho efectivo',
a.areaEfectiva as 'Area efectiva',
a.factorSeguridad as 'Factor de seguridad',
a.MAOP as 'MAOP (kPa)',
a.ruptura as 'Ruptura 0.85dL (kPa)',
a.FER as 'FER',
NULL as 'Diametro maximo',
NULL as 'Diametro minimo',
NULL as 'Ovalizacion',
NULL as 'Ovalizacion axial',
a.orientacionSoldadura as 'Orientacion soldadura',
a.velocidadHerramienta as 'Velc Herr',
a.comentarios as 'comentarios'
FROM ILI_IMPORT_MFL as a
JOIN ILI_INSPECTION as b ON a.ILI_INSPECTION_ID = b.ILI_INSPECTION_ID
WHERE
a.ID IN (
SELECT TOP 1 c.ID
FROM ILI_IMPORT_MFL as c
JOIN ILI_INSPECTION as d ON c.ILI_INSPECTION_ID = d.ILI_INSPECTION_ID
WHERE a.nroSoldadura = c.nroSoldadura
AND d.LINE_ID = @LINE_ID
ORDER BY d.BEGIN_DATE
)
AND b.LINE_ID = @LINE_ID
ORDER BY a.nroSoldadura, b.BEGIN_DATE
ILI_IMPORT_MFL と ILI_INSPECTION が結合されているのは、ILI_INSPECTION に必要な日付と行 ID が含まれているためです。
現在、サブクエリがあるため、このクエリの実行には約 6 分かかります。nroSoldadura ごとに複数の行が存在する可能性があるため、サブクエリがそこにあります。それらの最も古い行のみが必要です。
SQL Server 2008 を使用しています。
どうすれば修正できますか? ありがとう。
編集: nroSoldadura および BEGIN_DATE 列にインデックスを追加しようとしたところ、クエリ時間が 30 秒に短縮されました。それでも、学習のために最適化の可能性を確認できれば幸いです。