Re: what would a c extension buy me

From: Date: Mon, 13 Mar 2006 13:04:53 +0000
Subject: Re: what would a c extension buy me
References: 1 2 3 4 5  Groups: php.general 
Request: Send a blank email to php-general+get-231842@lists.php.net to get a copy of this message
... >>>word,def,wordid,pos,posn,wordsize,syn from korean_english where word >>>like '운전할 %' order by wordsize desc >> >>oh would you look at this.... >>you're ordering by WORDSIZE. >>stick an index on WORDSIZE!!! > > > > > http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html > > > In some cases, MySQL cannot use indexes to resolve the ORDER BY, note 'In Some Cases'. so stick an index on WORDSIZE and find out. > although it still uses indexes to find the rows that match the WHERE > clause. These cases include the following: > > The key used to fetch the rows is not the same as the one used in the > ORDER BY: > > SELECT * FROM t1 WHERE key2=constant ORDER BY key1; > > 2) > > >>you have an iceballs' chance in hell that I'm going to even read >>the 500+ lines of code that followed here ... let alone try to >>optimize it. ;-) >> > > > it was just a 40 line summary of 550 lines of code ........ ah, talk about being caught out :-) regardless a 40line summary won't cut it either - you have to take the block as a whole. > > > > questions i may deem myself to answer: > >>>) i get this: >>>root@www mysql]# tail -f /var/lib/mysql/mysqld_query.log > out >>> >>>[root@www mysql]# cat out | wc -l >>>15910 <<< ----------- that's line count >> >>how many queries? > > 15, 910 queries so roughly (15 * 60) seconds to run 15,000+ queries and do the processing? that doesn't actually sound so bad. > > > > things already taken care of: > 1) > >>> 9795 Query select >>>word,def,wordid,pos,posn,wordsize,syn from korean_english where word >>>like '운전할' order by wordsize desc >> >>in cases when you are not using the wildcard tokens (percentage signs) >>try changing the query to use something like: >> >> ... word = '운전할' ... > > > your suggestion and a line from the query_log match exactly. > > > 2) > >><snip> >> >>>then, it sends each token to CallmatchThis (line 14) which calls >>>matchThis (line 27 - 47 below) >>>matchThis may be called twice (2 sql queeries) >>>(line 51) select * where word = '$token' and another (take that, but if >>>it's not there .... issue the next sql ) >>>(line 55) select * where word like '$token%'; >> >>Dont do "SELECT *" - always explicitly specify the fields you want. >> > > that was just a paraphrase. the previous email points to the line number > of the code summary never paraphrase code - you only end up with smart ass comments like mine! have you reordered you fields in the db yet? adn made as many VARCHARs as possible into CHARs? > > >> >> >>>------------------------------------------+ >>>| korean_english | CREATE TABLE korean_english ( >>> wordid int(11) NOT NULL auto_increment, >>> word varchar(130) default NULL, >>> syn varchar(190) default NULL, >>> def blob, >>> posn int(2) default '1', >>> pos varchar(13) default '1', >>> submitter varchar(25) default NULL, >>> doe datetime NOT NULL default '0000-00-00 >>> 00:00:00', >>> wordsize tinyint(3) unsigned default NULL, >>> PRIMARY KEY (wordid), >>> KEY word_idx (word), >>> KEY wordid_idx >>> (wordid) >>>) ENGINE=MyISAM DEFAULT CHARSET=utf8 | >> >>reorder the fields so that the VARCHARS are at the end of the >>table (and the BLOB field at the very, very end of the table). >> >>also change VARCHARs to CHARs where you can. >> >> >>>+----------------+----------------------------------------------------------------------------------------------------------------------------------------- >>>----------------------------------------------------------------------------------------------------------------------------------------------------------- >>>--------------------------------------------------------------------- >>> >>> >>> >>> >>> >>> 1 function MainLoop() > >

« previous php.general (#231842) next »