MSSQL > MySQL ...

0

Chodzi o takie zapytanie:

SELECT
		Gracze.ID as graczid,        
		Klany.Nazwa as klan,
		Gracze.Nazwa as nazwa,
		Gracze.Rasa as rasa,
		GraczeStats.Level as level,
		GraczeStats.Exp as exp,                   
	FROM
		Gracze
	LEFT OUTER JOIN
		GraczeStats ON (Gracze.ID = GraczeStats.ID)
	LEFT OUTER JOIN
		KlanyCzlonkowie ON (Gracze.ID = KlanyCzlonkowie.CzlonekID)
	LEFT OUTER JOIN
		Klany ON (KlanyCzlonkowie.KlanID = Klany.ID)
	ORDER BY
		GraczeStats.Level DESC,
		GraczeStats.Exp DESC,
		GraczeStats.Kasa DESC,
	LIMIT 1000

Przy 10 000 Graczach (tyle samo w GraczStats relacja 1:1) przy 3000 KlanyCzlonkowie i przy 400 Klan przy pierwszym wywołaniu zapytania strasznie się długo wykonuje (jak się zdąrzy zcachować to już jest ok) . Natomiast w mssqlu zrobiłem niemal identyczne zapytanie (!!!) oczywiście ze zmiana składni etc i moje zapytanie wykonuje się w setne sekundy. Dlaczego tak się dzieje? czy Mssql niebo lepszy od Mysql?

Mysql wersja:
innodb_version 5.5.44
version 5.5.44-cll-lve
Mssql wersja:
Microsoft SQL Server 2014 - 12.0.4100.1

0

Jak możesz wywal LEFT - znacznie przyspieszy.
Załóż odpowiednie indeksy - pomocą służy dodanie EXPLAIN przed całym zapytaniem.
A MS SQL jest całe nieba lepszy niż MySQL.

1

Po prostu wywal LEFT. Co tu za filozofia... Poza tym widze, że tylko dla nazwy klanu to potrzebujesz, co wydaje mi się bezsensowne, bo jesli ktos jest w dwoch klanach, to te dane będziesz miał powielone... róznic się będą tylko nazwą klanu... Może spróbuj wstawić (oprócz EXPLAIN na początku :) ) zapytanie do środka - bez JOINów... coś w deseń:

SELECT
        Gracze.ID AS graczid,        
        (SELECT Nazwa FROM Klany JOIN KlanyCzlonkowie ON KlanyCzlonkowie.KlanID = Klany.ID WHERE KlanyCzlonkowie.CzlonekID= Gracze.ID) AS klan,
        Gracze.Nazwa AS nazwa,
        Gracze.Rasa AS rasa,
        GraczeStats.Level AS level,
        GraczeStats.EXP AS EXP,                   
    FROM
        Gracze
    ORDER BY
        GraczeStats.Level DESC,
        GraczeStats.EXP DESC,
        GraczeStats.Kasa DESC,
    LIMIT 1000

1 użytkowników online, w tym zalogowanych: 0, gości: 1