Feladat: az alábbi lekérdezés nagyon lassan fut le, nálam a költsége SQL Server 2014 alatt 1145 sec. Hozzá kellene írni a selecthez valamit, amitől a költsége leesik sokkal kisebbre.
USE TempDB GO CREATE TABLE Table1 (A CHAR (5) NOT NULL ) CREATE TABLE Table2 (B VARCHAR (1000) NOT NULL ) GO INSERT Table1 SELECT LEFT (AddressLine1, 5) AS A FROM AdventureWorks2014.Person.Address INSERT Table2 SELECT AddressLine1 AS B FROM AdventureWorks2014.Person.Address GO SELECT * FROM Table1 INNER JOIN Table2 ON Table2.B LIKE Table1.A + '%' |
A megfejtéseket szokás szerint kommentben várom, amelyeket 4 nap múlva engedek ki.
A Test Driven Development tanfolyam következő felvonása április 20-án lesz, jövő hét szerdáig még 25% kedvezménnyel lehet jelentkezni!
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.
LEAVE A COMMENT
5 COMMENTS
Nálam 2012 Express van a hozzá tartozó Adventureworks DB-vel, az Address tábla mérete 19614 sor.
A
SELECT *
FROM Table1
INNER JOIN Table2 ON
cast(Table2.B as char(5)) = Table1.A
query a konkrét esetben gyakorlatilag “0” alatt lefut.
A tempdb-m Hungarian_CI_AS-ban volt, így az ly-ok, stb. miatt eltért a resultset mérete, de Latin1-el futtatva ugyanaz a resultset.
Hm. 9-es SQL fejtörő már volt, ez igazából már a 10-es. :)
Gondolom a Table2.b első 5 karaktere (persze getlength-el lekérdezve) meg kellene egyezzen Table1.A-val…
WHERE left(Table2.B,5) = Table1.A
Trükkös a feladat, mert, ha rá is jövünk, hogy a loop join a gond, a hintek nem segítenek a LIKE miatt.
Köszi a feladványt! :)
Én így módosítanám:
SELECT *
FROM Table1
INNER JOIN Table2 ON
Table2.B LIKE Table1.A + ‘%’ and B>=A