Forry for my total lazyness. This patch works for me and makes some 
small things better to my viewpoint. I discovered that udmsearch deletes 
records in mutli-crc mode from all those ndictxx tables one by one. If 
you do such definition in MySQL as shown below, mnogosearch can delete 
from all tables with single DELETE command:

CREATE TABLE `merged_ndict` (
`url_id` mediumint(8) unsigned NOT NULL default '0',
`word_id` int(11) default NULL,
`intag` int(11) default NULL,
KEY `url_id` (`url_id`),
KEY `word_id` (`word_id`)
) TYPE=MRG_MyISAM 
UNION=(ndict2,ndict3,ndict4,ndict5,ndict6,ndict7,ndict8,ndict9,ndict10,ndict11,ndict12,ndict16,ndict32)


And there is a patch attached for mnogosearch too (sorry, it is 
reversed). This patch eliminates those extra DELETEs and additionally 
speeds up some MySQL INSERTs by adding "DELAYED" keyword to them.

     T�nu

diff -urN mnogosearch-3.1.16/src/sql.c mnogosearch-3.1.17/src/sql.c
--- mnogosearch-3.1.16/src/sql.c        Tue Jul  3 06:57:27 2001
+++ mnogosearch-3.1.17/src/sql.c        Wed Jun 13 13:56:46 2001
@@ -2165,10 +2165,6 @@
                }
                break;
        case UDM_DBMODE_MULTI_CRC:
-               sprintf(qbuf,"DELETE FROM merged_ndict WHERE url_id in (%d)",url_id);
-               sql_query(Indexer,qbuf);
-               if(UdmDBErrorCode(Indexer->db)) return (IND_ERROR);
-               /*
                for(i=MINDICT;i<MAXDICT;i++){
                        if(last!=DICTNUM(i)){
 #ifdef HAVE_ORACLE8
@@ -2182,7 +2178,7 @@
                                if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
                                last=DICTNUM(i);
                        }
-               }*/
+               }
                break;
        case UDM_DBMODE_SINGLE_CRC:
                sprintf(qbuf,"DELETE FROM ndict WHERE url_id=%d",url_id);
@@ -2217,10 +2213,6 @@
                strcpy(tablename,"ndict");
        }
 
-       sprintf(qbuf,"DELETE FROM merged_ndict WHERE url_id in (%d)",url_id);
-       sql_query(Indexer,qbuf);
-       if(UdmDBErrorCode(Indexer->db)) return (IND_ERROR);
-
        for(n=0;n<NDICTS;n++){
                if(prev_dictlen==dictlen[n])continue;
                prev_dictlen=dictlen[n];
@@ -2243,9 +2235,9 @@
                }
 
                /* Delete old words */
-       /*      sprintf(qbuf,"DELETE FROM %s WHERE url_id=%d",tbl_nm,url_id);
+               sprintf(qbuf,"DELETE FROM %s WHERE url_id=%d",tbl_nm,url_id);
                sql_query(Indexer,qbuf);
-                if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);*/
+                if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
 
                /* Insert new word */
                if(Indexer->Conf->DBType==UDM_DB_MYSQL){
@@ -2255,9 +2247,9 @@
 
                        qb=(char*)malloc(mlen);
                        if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
-                               sprintf(qb,"INSERT DELAYED INTO %s (url_id,word,intag) 
VALUES ",tbl_nm);
+                               sprintf(qb,"INSERT INTO %s (url_id,word,intag) VALUES 
+",tbl_nm);
                        }else{
-                               sprintf(qb,"INSERT DELAYED INTO %s 
(url_id,word_id,intag) VALUES ",tbl_nm);
+                               sprintf(qb,"INSERT INTO %s (url_id,word_id,intag) 
+VALUES ",tbl_nm);
                        }
                        qe=qb+strlen(qb);
 
@@ -2289,9 +2281,9 @@
                                                }
                                                /* Init query again */
                                                
if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
-                                                       sprintf(qb,"INSERT DELAYED 
INTO %s (url_id,word,intag) VALUES ",tbl_nm);
+                                                       sprintf(qb,"INSERT INTO %s 
+(url_id,word,intag) VALUES ",tbl_nm);
                                                }else{
-                                                       sprintf(qb,"INSERT DELAYED 
INTO %s (url_id,word_id,intag) VALUES ",tbl_nm);
+                                                       sprintf(qb,"INSERT INTO %s 
+(url_id,word_id,intag) VALUES ",tbl_nm);
                                                }
                                                qe=qb+strlen(qb);
                                                have_words = 0;
@@ -2310,9 +2302,9 @@
                                len=strlen(Indexer->Word[i].word);
                                if (Indexer->Word[i].count && (DICTNUM(len) == 
dictlen[n])){
                                        if(Indexer->Conf->DBMode==UDM_DBMODE_MULTI){
-                                               sprintf(qbuf,"INSERT DELAYED INTO %s 
(url_id,word,intag) 
VALUES(%d,'%s',%d)",tbl_nm,url_id,Indexer->Word[i].word,Indexer->Word[i].count);
+                                               sprintf(qbuf,"INSERT INTO %s 
+(url_id,word,intag) 
+VALUES(%d,'%s',%d)",tbl_nm,url_id,Indexer->Word[i].word,Indexer->Word[i].count);
                                        }else{
-                                               sprintf(qbuf,"INSERT DELAYD INTO %s 
(url_id,word_id,intag) 
VALUES(%d,%d,%d)",tbl_nm,url_id,UdmStrCRC32(Indexer->Word[i].word),Indexer->Word[i].count);
+                                               sprintf(qbuf,"INSERT INTO %s 
+(url_id,word_id,intag) 
+VALUES(%d,%d,%d)",tbl_nm,url_id,UdmStrCRC32(Indexer->Word[i].word),Indexer->Word[i].count);
                                        }
                                        sql_query(Indexer,qbuf);
                                        
if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
@@ -3637,10 +3629,6 @@
                                        }
                                        break;
                                case UDM_DBMODE_MULTI_CRC:
-                                       sprintf(qbuf,"DELETE FROM merged_ndict WHERE 
url_id in (%s)",urlin);
-                                       sql_query(Indexer,qbuf);
-                                       if(UdmDBErrorCode(Indexer->db)) return 
(IND_ERROR);
-                                       /*
                                        for(i=MINDICT;i<MAXDICT;i++){
                                                if(last!=DICTNUM(i)){
                                                        sprintf(qbuf,"DELETE FROM 
ndict%d WHERE url_id in (%s)",
@@ -3649,7 +3637,7 @@
                                                        
if(UdmDBErrorCode(Indexer->db))return(IND_ERROR);
                                                        last=DICTNUM(i);
                                                }
-                                       }*/
+                                       }
                                        break;
                                case UDM_DBMODE_CACHE:
                                

Reply via email to