29. december 2007 - 21:41Der er
15 kommentarer og 1 løsning
Underlig langsom sql-string
Jeg fatter ikke hvorfor min første sql-string(1) er 1.75 sek om at lave en søning når min sql-string(2) kan gøre det på 0.02 sek bare fordi jeg tilføjer: "AND MATCH(im.title) AGAINST ('boot')" efter "WHERE iu.self_id = 2"
sql-string(1): 1.75 sek SELECT im.id, iu.movie_number AS number, im.title, im.year, im.url, ig.danish AS genre, io.text AS ugroup, ic.comment, ir.result, MATCH(im.title) AGAINST ('boot') AS Score FROM idb_movie im INNER JOIN idb_userself iu ON iu.idb_id = im.id LEFT JOIN idb_genre ig ON ig.id = iu.genre_id LEFT JOIN idb_group io ON io.id = iu.group_id AND io.self_id = 2 LEFT JOIN idb_comment ic ON ic.idb_id = im.id AND ic.self_id = 2 LEFT JOIN idb_rating ir ON ir.id = im.id WHERE iu.self_id = 2 HAVING Score ORDER BY Score LIMIT 0,20;
sql-string(2): 0.02 sek SELECT im.id, iu.movie_number AS number, im.title, im.year, im.url, ig.danish AS genre, io.text AS ugroup, ic.comment, ir.result, MATCH(im.title) AGAINST ('boot') AS Score FROM idb_movie im INNER JOIN idb_userself iu ON iu.idb_id = im.id LEFT JOIN idb_genre ig ON ig.id = iu.genre_id LEFT JOIN idb_group io ON io.id = iu.group_id AND io.self_id = 2 LEFT JOIN idb_comment ic ON ic.idb_id = im.id AND ic.self_id = 2 LEFT JOIN idb_rating ir ON ir.id = im.id WHERE iu.self_id = 2 AND MATCH(im.title) AGAINST ('boot') HAVING Score ORDER BY Score LIMIT 0,20;
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
sql-string(1): 1.75 sek id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE ic system <MEMO> <NULL> <NULL> <NULL> 0 const row not found 1 SIMPLE ir system <MEMO> <NULL> <NULL> <NULL> 0 const row not found 1 SIMPLE iu ALL <MEMO> <NULL> <NULL> <NULL> 50000 Using where; Using temporary; Using filesort 1 SIMPLE ig ref <MEMO> search <BLOB> <MEMO> 1 1 SIMPLE io eq_ref <MEMO> PRIMARY <BLOB> <MEMO> 1 1 SIMPLE im eq_ref <MEMO> PRIMARY <BLOB> <MEMO> 1
sql-string(2): 0.02 sek id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE ic system <MEMO> <NULL> <NULL> <NULL> 0 const row not found 1 SIMPLE ir system <MEMO> <NULL> <NULL> <NULL> 0 const row not found 1 SIMPLE im fulltext <MEMO> unik <BLOB> <MEMO> 1 Using where; Using filesort 1 SIMPLE iu ref <MEMO> search <BLOB> <MEMO> 1 Using where 1 SIMPLE ig ref <MEMO> search <BLOB> <MEMO> 1 1 SIMPLE io eq_ref <MEMO> PRIMARY <BLOB> <MEMO> 1
Hvor mange rækker matcher (1) i forhold til hvor mange rækker der ville komme ud af det uden den where, der er i (1)? Bare antallet af rækker. Indexer virker bedst, når de kun udvælger en del af sættet - skal hele (eller næsten hele) sættet ud, så kan indexet være ligegyldigt.
Mange tak for hjælpen.. vi snakkes nok ved i det nye år :D
Godt nytår til jer..
Synes godt om
Ny brugerNybegynder
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.