Łączenie 3 tabel - szybkość wykonania kwerendy

0

Próbuje połączyć 3 tabele ze sobą:
tabela sprzedaż- zawiera duża ilośc danych
tabela parametry produktu zawiera dużą ilosc danych
tabela sklepy - zaledwie kilkaset wierszy

Przy rozwiązaniu (diagram 1) kwerenda wykonuje sie bardzo wolno:

SELECT sprzedaz.[Nr sklepu], sprzedaz.[id produktu], sprzedaz.sprzedaz, sprzedaz.kraj, parametry_produktu.parametr1, parametry_produktu.parametr2
FROM (sprzedaz INNER JOIN sklepy ON sprzedaz.[Nr sklepu] = sklepy.[numer sklepu]) INNER JOIN parametry_produktu ON (sprzedaz.[id produktu] = parametry_produktu.[id produktu]) AND (sklepy.kraj = parametry_produktu.kraj); 

user image
Jeśli wstawie sztucznie do tabeli sprzedaż kolumne kraj i zrobie zapytanie za pomocą dwóch tabel, wszystko wykonuje sie bardzo szybko (diagram 2)

SELECT sprzedaz.[Nr sklepu], sprzedaz.[id produktu], sprzedaz.sprzedaz, sprzedaz.kraj, parametry_produktu.parametr1, parametry_produktu.parametr2
FROM sprzedaz INNER JOIN parametry_produktu ON (sprzedaz.kraj = parametry_produktu.kraj) AND (sprzedaz.[id produktu] = parametry_produktu.[id produktu]); 

user image

Jednak chciałbym to zrobić porządnie i nie musieć za każdym razem wypełniać tabeli sprzedaż dodatkową kolumną. Może ktoś wytłumaczyć dlaczego wariant 1 wykonuje się tak wolno?

1

To jest Access wg. msdn warto zamienić joiny na podzapytanie zrób tak

SELECT 
	s.[Nr sklepu]
	, s.[id produktu]
	, s.sprzedaz
	, s.kraj
	, parametry_produktu.parametr1
	, parametry_produktu.parametr2
FROM (
	SELECT 
		sprzedaż.[Nr sklepu]
		, sprzedaż.[id produktu]
		, sprzedaż.sprzedaz
		, sklepy.kraj
	FROM
		sprzedaz 
		INNER JOIN SKLEPY ON sprzedaz.[Nr sklepu] = sklepy.[numer sklepu] 
	) as S
	INNER JOIN parametry_produktu ON (s.kraj = parametry_produktu.kraj) AND (s.[id produktu] = parametry_produktu.[id produktu]); 					

zakladam, że typ numer sklepu jest taki sam jak nr sklepu

0

hmm moim zdaniem masz za mało tabel (nie znam dokładnie szczegółów Twojego projektu więc moje przemyślenia mogą być błędne), można by to było oprzeć na takiej strukturze jaka jest w bazie Northwind, diagram w załączniku.

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