Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    57

    Una ricerca complessa blocca le altre in Mysql

    Il mio DB Mysql contiene circa 50 mila record di notizie che vado a consultare tramite delle chiavi di ricerca preimpostate. Sono abbastanza complesse perché contengono molti termini legati da vari AND, OR e NOT. Quando lancio la ricerca tutte le altre attività (altre ricerche, inserimenti ecc.) vengono bloccate finché la prima ricerca che dura anche 2-3 minuti non è terminata. In pratica il DB può essere interrogato da un utente alla volta.
    Andando a consultare i processi vedo nello stato delle query un solo "sorting result" e tutti gli altri "Locked".
    Possibile che Mysql sia così limitato? E' più probabile che abbia sbagliato qualcosa! Che dovrei fare?

  2. #2
    50mila record sono un'inezia. probabilmente la query non è ottimizzata (2-3 minuti!...). Postala, che le si dà un'occhiata

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    57
    Ecco un esempio. Si tratta di una ricerca che comprende una serie di parole chiave e alcune devono essere sensibili alle maiuscole, altre a parola esatta ecc. Poi devono andare a pescara da una serie di fonti definite. Casomai ti spiego meglio...

    SELECT CONCAT( DATE_FORMAT( STR_TO_DATE( CONCAT( articoli.data, ' ', articoli.ora, ':00' ) , '%d/%m/%Y %H:%i:%s' ) , '%a, %d %b %Y %T' ) , ' +0100' ) AS rfcpubdate, articoli.* FROM articoli WHERE (( MATCH(titolo_art,testo_art) AGAINST('"Fiat" "Agnelli" "Torino" "Suv" "Panda" "Pneumatic" "Renault" "Punto" "Bmw" "Punto" "Citroen" "Goodyear" "Toyota" "Renault" "Del Piero" "Juventus" ' IN BOOLEAN MODE)) OR ( titolo_art LIKE '%Ferrari%' AND titolo_art LIKE '%Panda%') OR ( titolo_art LIKE '%Ferrari%' AND titolo_art LIKE '%pneumatic%') OR ( titolo_art LIKE '%Ferrari%' AND titolo_art LIKE '%Ford%') OR ( titolo_art LIKE '%Formula1%' AND titolo_art LIKE '%Panda%') OR ( titolo_art LIKE '%Formula1%' AND titolo_art LIKE '%pneumatic%') OR ( titolo_art LIKE '%Formula1%' AND titolo_art LIKE '%Ford%') OR ( titolo_art LIKE '%Formula Uno%' AND titolo_art LIKE '%Panda%') OR ( titolo_art LIKE '%Formula Uno %' AND titolo_art LIKE '%pneumatic%') OR ( titolo_art LIKE '%Formula Uno%' AND titolo_art LIKE '%Ford%') OR ( titolo_art LIKE '%Stabilimento%' AND titolo_art LIKE '%Panda%') OR ( titolo_art LIKE '%Stabilimento%' AND titolo_art LIKE '%pneumatic%') OR ( testo_art LIKE '%Ferrari%' AND testo_art LIKE '%Panda%') OR ( testo_art LIKE '%Ferrari%' AND testo_art LIKE '%pneumatic%') OR ( testo_art LIKE '%Ferrari%' AND testo_art LIKE '%Ford%') OR ( testo_art LIKE '%Formula1%' AND testo_art LIKE '%Panda%') OR ( testo_art LIKE '%Formula1%' AND testo_art LIKE '%pneumatic%') OR ( testo_art LIKE '%Formula1%' AND testo_art LIKE '%Ford%') OR ( testo_art LIKE '%Formula Uno%' AND testo_art LIKE '%Panda%') OR ( testo_art LIKE '%Formula Uno %' AND testo_art LIKE '%pneumatic%') OR ( testo_art LIKE '%Formula Uno%' AND testo_art LIKE '%Ford%') OR ( testo_art LIKE '%Stabilimento%' AND testo_art LIKE '%Panda%') OR ( testo_art LIKE '%Stabilimento%' AND testo_art LIKE '%pneumatic%') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]F1[[:>:]]') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]Eni[[:>:]]') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]EG[[:>:]]') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]F1[[:>:]]') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]BP[[:>:]]') OR ( titolo_art REGEXP '[[:<:]]F1[[:>:]]' AND titolo_art REGEXP '[[:<:]]IP[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]F1[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]Eni[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]EG[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]F1[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]BP[[:>:]]') OR ( testo_art REGEXP '[[:<:]]F1[[:>:]]' AND testo_art REGEXP '[[:<:]]IP[[:>:]]') OR ( 1=2)) AND (( sezione in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,2 0,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36, 37,38,39,40,45,46,47,48,49,88) OR fonte = 1473 OR fonte = 1474 OR fonte = 1475 OR fonte = 1476 OR fonte = 1122 OR fonte = 1477 OR fonte = 1478 OR fonte = 1479 OR fonte = 1480 OR fonte = 1481 OR fonte = 1482 OR fonte = 1483 OR fonte = 1484 OR fonte = 1485 OR 1=2)) ORDER BY str_to_date(data,'%d/%m/%Y') DESC, ora DESC

  4. #4
    già solo a guardarla si capisce che non potrà mai essere performante. cerca di spezzare la query, andando via via a scremare e riducendo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    57
    Spezzare come? Occorre che vi sia concomitanza di parole chiave per i risultati...

  6. #6
    passando per delle tabelle temporanee. ad esempio, prima limiti la fonte, poi la zezione e infine le parole chiave

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    57
    Quello che mi piacerebbe sapere è se è normale che una query del genere possa bloccare tutte le altre attività del Db. Oppure c'è un'anomalia da qualche parte.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.