Soci (Soczó Zsolt) szakmai blogja

2015.03.09.

SQL fejtörő 10.

Filed under: Adatbázisok,SQL Server,Szakmai élet,Teaser — Soczó Zsolt @ 21:27

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!

5 Comments

  1. 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.

    Comment by Pócza Krisztián — 2015.03.09. @ 23:11

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

    Comment by Pócza Krisztián — 2015.03.09. @ 23:12

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

    Comment by Laszlo Gombos — 2015.03.10. @ 00:30

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

    Comment by Kovács Zsolt — 2015.03.12. @ 08:14

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

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

    Comment by Laci — 2015.03.12. @ 15:18

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress