Avatar billede razmuz_dk Nybegynder
14. oktober 2005 - 09:26 Der er 7 kommentarer og
1 løsning

Søg + sort = meget lang tid - kan det være rigtigt?

Jeg har lavet nogle tests på min sql-server, for at finde ud af hvorfor et specifikt sql-kald kørte meget langsomt.

Jeg laver 4 tests:
1: Jeg selecter alt
2: Jeg selecter alt og sorterer
3: Jeg søger på user_id = '0'
4: Jeg søger på user_id = '0' og sorterer

Test 1, 2 og 3 blev udført på under 0,0020 sekunder. Men test 4 tager omkring 1,5-1,6 sekunder.

Herunder kan i se kaldene/resultaterne:
SQL query:
SELECT *
FROM `spillere`
LIMIT 0 , 30
(168090 total, Query took 0.0018 sec)


SQL query:
SELECT *
FROM `spillere`
WHERE 1
ORDER BY `vaerdi` ASC
LIMIT 0 , 30
(168090 total, Query took 0.0020 sec)



SQL query:
SELECT *
FROM `spillere`
WHERE `klub_id` =0
LIMIT 0 , 30
(125531 total, Query took 0.0020 sec)



SQL query:
SELECT *
FROM `spillere`
WHERE `klub_id` =0
ORDER BY `vaerdi` ASC
LIMIT 0 , 30
(125531 total, Query took 1.6018 sec)

Kan det virkelig passe at test 4 skal være så langsom? Jeg kan jo se at det tager 0,002 sekunder at finde records med user_id = '0' (test 3), og min logiske sans siger mig at sorteringen vil tage kortere tid end i test 2 eftersom der er færre rækker at sortere på. Derfor kan jeg simpelthen ikke begribe hvorfor test 4 tager så lang tid? Det kan ikke være rigtigt! ;)

Så vidt jeg ved har det ingen effekt - men jeg har forsøgt at sætte et index på rating (og jeg har naturligvis index på user_id).

Test 4 giver i øvrigt følgende ved en EXPLAIN:

id      select_type      table      type      possible_keys      key      key_len      ref      rows      Extra
1     SIMPLE     spillere     ALL     klub_id     NULL     NULL     NULL     126068     Using where; Using filesort
Avatar billede razmuz_dk Nybegynder
14. oktober 2005 - 09:28 #1
Ups - jeg mente:
Så vidt jeg ved har det ingen effekt - men jeg har forsøgt at sætte et index på vaerdi (og jeg har naturligvis index på klub_id).
Avatar billede arne_v Ekspert
14. oktober 2005 - 09:30 #2
hvad siger EXPLAIN ?
Avatar billede razmuz_dk Nybegynder
14. oktober 2005 - 09:31 #3
arne_v -> Den har jeg skrevet i indlæggets sidste linje? :S
Avatar billede arne_v Ekspert
14. oktober 2005 - 09:32 #4
ups

:-(
Avatar billede arne_v Ekspert
14. oktober 2005 - 09:33 #5
det er jo nok

"Using filesort"

som plager dig
Avatar billede razmuz_dk Nybegynder
14. oktober 2005 - 09:35 #6
Ja det ved jeg godt - men hvordan får jeg den væk?
Avatar billede razmuz_dk Nybegynder
14. oktober 2005 - 09:47 #7
FORCE INDEX(PRIMARY) reddede mig! :D

SELECT *
FROM `spillere`
FORCE INDEX (
PRIMARY )
WHERE `klub_id` = '0'
ORDER BY `vaerdi` DESC
LIMIT 0 , 30
(125531 total, Query took 0.1567 sec)


Har andre forslag til at nedbringe tiden yderligere er de meget velkomne.
Avatar billede razmuz_dk Nybegynder
15. oktober 2005 - 23:54 #8
Lukker og slukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester