webForumDet fria alternativet

Statistik över var besökaren kommer ifrån

Databaser & SQL

4 svar · 299 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Behöver lite riktlinjer över hur jag bör göra för att få en så snabb sidladdning som möjligt.
Har dessa tabeller idag:

Stat_Searchengine
. . . . . . . . . . . . . .
IDno	Fullname
1	Google
2	MSN

Stat_Searchengine_url
. . . . . . . . . . . . . .
IDno	SearchengineIDno	Url
1	1			www.google.com
2	2			www.msn.se

Stat
. . . . . . . . . . . . . .
Referrer
www.google.com/search?q=abcde

Relationen mellan dessa är väl ganska tydlig.
Fråga:
Hur skriver jag selecten om jag vill visa hur många besökare som kommer ifrån Google?

Jag har en variant idag men den känns alldelens för trögladdad, därav min fråga. :)

Medlem sedan dec. 200012 464 inlägg
#2

Jag förstår inte avsikten med Stat_Searchengine_url.

Varför inte lagra url direkt i Stat_Searchengine?

Gör du en join med substring(referrer) = url?

Stat borde innehålla ett search_engine_idno som är foreign key till Stat_Searchengine.

Medlem sedan juni 20003 076 inlägg
#3

Jag förstår inte avsikten med Stat_Searchengine_url.

Eftersom bla. google har ett flertal domäner så vill jag gruppera ihop dem alla under samma namn. Referrer kan komma ifrån google.se, .com osv.

Varför inte lagra url direkt i Stat_Searchengine?

Se ovan.

Gör du en join med substring(referrer) = url?

Använder en udf idag som ser ut så här:

ALTER FUNCTION ConvertUrl
	(@Referrer varchar(1000))

RETURNS varchar(50)

AS
BEGIN
	Declare @Ref as varchar(50)

	Select @Ref = Fullname From Stat_Searchengine e
	Inner Join Stat_Searchengine_Url u On e.IDno = u.SearchengineIDno 
	Where @Referrer Like '%'+u.Url+'%'

RETURN @Ref

END

Och körningen ser ut ungefär så här (9000 poster tar 30 sek. att hämta! :( )

Select e.Fullname, 
	(Select count(s.Referrer)
		From Stat s
			Where dbo.ConvertUrl(s.Referrer) = e.Fullname
	)
	From Stat_Searchengine e
		Where e.Internal = 0

Stat borde innehålla ett search_engine_idno som är foreign key till Stat_Searchengine.

Mm, jag börjar också fundera på det, men då måste Google plockas ut redan vid Inserten istället.
Men det är väl kanske bättre då än som det är nu!

Jag vet inte men, det känns som om databasdesignen är helt ok, det gäller bara att göra rätt saker vid rätt tillfälle, antingen vid inserten eller efteråt vid selecten.
Och det är det jag känner mig osäker på! :)

Medlem sedan dec. 200012 464 inlägg
#4

Ok, jag förstår databasdesignen.

Ett villkor som

Where dbo.ConvertUrl(s.Referrer) = e.Fullname

kommer alltid att resultera i en sekventiell läsning av hela stat tabellen, så att plocka ut search engine redan vid insert verkar en bra åtgärd.

Medlem sedan juni 20003 076 inlägg
#5

så att plocka ut search engine redan vid insert verkar en bra åtgärd.

Jag får prova den varianten, blir det inte bra så återkommer jag! :)

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)