RE: [PHP] Improving a MySQL Search

From: Date: Mon, 07 Mar 2005 16:34:03 +0000
Subject: RE: [PHP] Improving a MySQL Search
Groups: php.general 
Request: Send a blank email to php-general+get-210171@lists.php.net to get a copy of this message
Further to my email last week, I've now indexed all the fields that get searched on (i.e. sql statement is similar to "select x, y from table where x='blah'" - x is the indexed field). Is that the correct field to index? My table structure is now as follows: CREATE TABLE syslog ( ID int(100) NOT NULL auto_increment, unixtime int(20) NOT NULL default '0', date date default NULL, time time default NULL, device_id varchar(255) default NULL, log_id varchar(255) default NULL, type varchar(255) default NULL, subtype varchar(255) default NULL, pri varchar(255) default NULL, SN varchar(255) default NULL, duration varchar(255) default NULL, policyid varchar(255) default NULL, proto varchar(255) default NULL, service varchar(255) default NULL, status varchar(255) default NULL, src varchar(255) default NULL, srcname varchar(255) default NULL, dst varchar(255) default NULL, dstname varchar(255) default NULL, src_int varchar(255) default NULL, dst_int varchar(255) default NULL, sent varchar(255) default NULL, rcvd varchar(255) default NULL, sent_pkt varchar(255) default NULL, rcvd_pkt varchar(255) default NULL, src_port varchar(255) default NULL, dst_port varchar(255) default NULL, vpn varchar(255) default NULL, tran_ip varchar(255) default NULL, tran_port varchar(255) default NULL, user varchar(255) NOT NULL default '', ui varchar(255) NOT NULL default '', action varchar(255) NOT NULL default '', reason varchar(255) NOT NULL default '', msg varchar(255) NOT NULL default '', vd varchar(255) NOT NULL default '', hostname varchar(255) NOT NULL default '', module varchar(255) NOT NULL default '', submodule varchar(255) NOT NULL default '', virdb varchar(255) NOT NULL default '', idsdb varchar(255) NOT NULL default '', libav varchar(255) NOT NULL default '', aven varchar(255) NOT NULL default '', imap varchar(255) NOT NULL default '', smtp varchar(255) NOT NULL default '', pop3 varchar(255) NOT NULL default '', http varchar(255) NOT NULL default '', ftp varchar(255) NOT NULL default '', fcni varchar(255) NOT NULL default '', fdni varchar(255) NOT NULL default '', idsmn varchar(255) NOT NULL default '', idssn varchar(255) NOT NULL default '', rbldb varchar(255) NOT NULL default '', seq varchar(255) NOT NULL default '', old_sintf varchar(255) NOT NULL default '', old_dintf varchar(255) NOT NULL default '', old_saddr varchar(255) NOT NULL default '', old_daddr varchar(255) NOT NULL default '', old_schd varchar(255) NOT NULL default '', old_svr varchar(255) NOT NULL default '', old_act varchar(255) NOT NULL default '', old_nat varchar(255) NOT NULL default '', old_log varchar(255) NOT NULL default '', new_sintf varchar(255) NOT NULL default '', new_dintf varchar(255) NOT NULL default '', new_saddr varchar(255) NOT NULL default '', new_daddr varchar(255) NOT NULL default '', new_schd varchar(255) NOT NULL default '', new_svr varchar(255) NOT NULL default '', new_act varchar(255) NOT NULL default '', new_nat varchar(255) NOT NULL default '', new_log varchar(255) NOT NULL default '', sport varchar(255) NOT NULL default '', dport varchar(255) NOT NULL default '', cat varchar(255) NOT NULL default '', cat_desc varchar(255) NOT NULL default '', url varchar(255) NOT NULL default '', from varchar(255) NOT NULL default '', to varchar(255) NOT NULL default '', file varchar(255) NOT NULL default '', virus varchar(255) NOT NULL default '', intf varchar(255) NOT NULL default '', attack_id varchar(255) NOT NULL default '', dir_disp varchar(255) NOT NULL default '', tran_disp varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', local varchar(255) NOT NULL default '', remote varchar(255) NOT NULL default '', assigned varchar(255) NOT NULL default '', stat varchar(255) NOT NULL default '', loc_ip varchar(255) NOT NULL default '', loc_port varchar(255) NOT NULL default '', rem_ip varchar(255) NOT NULL default '', rem_port varchar(255) NOT NULL default '', out_if varchar(255) NOT NULL default '', vpn_tunnel varchar(255) NOT NULL default '', init varchar(255) NOT NULL default '', mode varchar(255) NOT NULL default '', stage varchar(255) NOT NULL default '', dir varchar(255) NOT NULL default '', spi varchar(255) NOT NULL default '', old_status varchar(255) NOT NULL default '', new_status varchar(255) NOT NULL default '', passwd varchar(255) NOT NULL default '', sintf varchar(255) NOT NULL default '', dintf varchar(255) NOT NULL default '', saddr varchar(255) NOT NULL default '', daddr varchar(255) NOT NULL default '', schd varchar(255) NOT NULL default '', svr varchar(255) NOT NULL default '', act varchar(255) NOT NULL default '', nat varchar(255) NOT NULL default '', log varchar(255) NOT NULL default '', in_spi varchar(255) NOT NULL default '', out_spi varchar(255) NOT NULL default '', error varchar(255) NOT NULL default '', seqno varchar(255) NOT NULL default '', field varchar(255) NOT NULL default '', old varchar(255) NOT NULL default '', new varchar(255) NOT NULL default '', gateway varchar(255) NOT NULL default '', interface varchar(255) NOT NULL default '', old_device varchar(255) NOT NULL default '', old_distance varchar(255) NOT NULL default '', old_dst varchar(255) NOT NULL default '', new_device varchar(255) NOT NULL default '', new_distance varchar(255) NOT NULL default '', new_dst varchar(255) NOT NULL default '', device varchar(255) NOT NULL default '', distance varchar(255) NOT NULL default '', icmp_id varchar(255) NOT NULL default '', icmp_type varchar(255) NOT NULL default '', icmp_code varchar(255) NOT NULL default '', PRIMARY KEY (ID), KEY unixtime (unixtime), KEY subtype (subtype), KEY type (type), KEY src (src), KEY dst (dst), KEY dst_port (dst_port), KEY src_port (src_port), KEY srcname (srcname)) TYPE=MyISAM AUTO_INCREMENT=1481721 ; Sorry for it being so long, but that's the table! Currently there are 1.5 million (1,500,00) records, and searching the table for the last 10 records is taking up to 40 seconds. e.g. select unixtime, type, subtype, src, dst, msg, pri from syslog where type='ips' ORDER BY unixtime DESC LIMIT 10 Does anyone have any suggestions for improving the search? Cheers James -------------------------------------------------------------------------------- From: Gareth Williams [mailto:gareth@venditor.com] Sent: Fri 04/03/2005 13:17 To: James Nunnerley Cc: php-general@lists.php.net Subject: Re: [PHP] Improving a MySQL Search Create some indexes. I spend most of my day messing around with a table of 2000000 records, and indexes increased the speed from 40 seconds to 55 minutes for a query, down to the longest being less than 5 seconds. On 28 Feb 2005, at 16:42, James Nunnerley wrote: > I'm creating a serious of pages that show various aspects from a Syslog > output. > > The main information is currently stored in one MySQL table - which > after > having been run for about 2 and a bit months has got nearly 1000000 > records. > With this amount of information, it's taking a large time to carryout > even > the simplest query. > > > > Someone has suggested I look at setting up an archive, for slower > searches, > and a more recent table for quicker searching, but I'm reluctant to do > this, > as it would take quite a bit of time to copy all the information > across as > it stands, and then also to run a cron which transfers between the > live and > archive. > > > > Can anyone suggest some quick easy methods for speeding up the search? > > > > Cheers > > James >

« previous php.general (#210171) next »