FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Flitig postare
|
Har läst på lite om hur man skall gå till väga för att göra fulltext sökningar i massor av data och då rekommenderas att man använder sig av en såkallad "common words" lista för att filtrera bort ointressanta ord. Är det någon som har en sådan för svenska?
För annat onödigt vetande så kan jag berätta hur glad jag blev när jag felsökte varför vissa förfrågningar mot MySQL tog 0.5-7 sec att göra och efter lusläsning av diverse optimiseringstips i böcker för MySQL så hittade jag felet: Kod:
mysql> SELECT id FROM feeds WHERE hash=-986428719 AND url='http://sdfsdsdf.fsdf.se/1187633754_vr_sk.html'; +--------+ | id | +--------+ | 201583 | +--------+ 1 row in set (0.67 sec) mysql> SELECT id FROM feeds WHERE hash='-986428719' AND url='http://sdfsdsdf.fsdf.se/1187633754_vr_sk.htmll'; +--------+ | id | +--------+ | 201583 | +--------+ 1 row in set (0.00 sec) Till detta hör att hash är varchar och att Python/MySQLdb som skapar queryn tror att det jag skickar in är integers så mysql måste göra en typomvanlding vilket tar tid. |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
Tror inte det är common words du letar efter. Det du söker är stopwords, dvs ord som - och, det, att osv.
Här är en lista http://snowball.tartarus.org/algorit...edish/stop.txt |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Flitig postare
|
Precis. Tack
![]() |
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Citat:
Testa med att lägga till SQL_NO_CACHE så används inte query-cachen, utan varje sökning går verkligen in i databasen och söker. Antagligen kommer båda frågorna ta ungefär lika lång tid. Hur stor är tabellen förresten och använder du dina index korrekt? Kod:
SELECT SQL_NO_CACHE id FROM feeds WHERE hash=-986428719 AND url='http://sdfsdsdf.fsdf.se/1187633754_vr_sk.html'; Respektive SELECT SQL_NO_CACHE id FROM feeds WHERE hash='-986428719' AND url='http://sdfsdsdf.fsdf.se/1187633754_vr_sk.htmll'; |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Mycket flitig postare
|
Om hashvärdet är en int så verkar det smartare att spara det som en int istället för att spara det som en varchar.
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Flitig postare
|
Citat:
Empty set (0.00 sec) mysql> SELECT SQL_NO_CACHE id FROM feeds WHERE hash=-986428719 AND url='http://sdfsdsdf.fsdf.se/1187633754_vr_sk.htmll'; Empty set (0.23 sec) Det _är_ typomvandlingen som tar tid. |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Citat:
|
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Flitig postare
|
Citat:
"Avoid overuse of MySQL's automatic type conversion. MySQl will perform automatic type conversion, but if you can avoid conversions, you may get better performance" Står även att indexet kan helt uteslutas om mysql måste göra en typkonvertering. |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Medlem
|
Citat:
Oj, missade sista raden. Underlig att indexet inte används då. Då kanske MySQL inte typomvandlar själva indatan, utan det som finns i databasen. |
||
![]() |
![]() |
Svara |
|
|