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.

March 9, 2015 / by Zsolt Soczó

SQL fejtörő 10.

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

  • Pócza Krisztián March 9, 2015

    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.

  • Pócza Krisztián March 9, 2015

    Hm. 9-es SQL fejtörő már volt, ez igazából már a 10-es. :)

  • Laszlo Gombos March 10, 2015

    Gondolom a Table2.b első 5 karaktere (persze getlength-el lekérdezve) meg kellene egyezzen Table1.A-val…

  • Kovács Zsolt March 12, 2015

    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! :)

  • Laci March 12, 2015

    Én így módosítanám:

    SELECT *
    FROM Table1
    INNER JOIN Table2 ON
    Table2.B LIKE Table1.A + ‘%’ and B>=A