MySQL Performance Example Was: Seriously, WTF?

Jonathan Stowe jns at integration-house.com
Thu May 8 16:22:21 BST 2008


On Thu, 2008-05-08 at 16:01 +0100, Christopher Jones wrote:
> To reply to the first few questions, there isn't (currently) an index  
> on `location`. I did try using an index, but I'm pretty certain it  
> made the query slower (?!) so I removed it. But that just doesn't  
> seem right - so to make sure I've added the index back again and  
> (once MySQL is finished) I'll re-do the query and let you know what  
> happens.
> 

I'm not sure about MySQL but elsewhere I'd be inclined to make a single
index on both 'location' and 'chr' (ie "CREATE INDEX
histones_chr_location ON histones(chr, location)" ) which gives the
optimizer a better hint that it should use that index for that kind of
where clause.


> This is what's in there at the moment (please don't flame for use of  
> MyISAM - there are no foreign keys being used, so I didn't bother  
> setting an ENGINE, and it defaulted to MyISAM).
> 
> 
> CREATE TABLE `histones` (
>    `read_id` int(11) NOT NULL auto_increment,
>    `chr` varchar(4) NOT NULL default '',
>    `location` int(10) unsigned NOT NULL default '0',
>    `tally` int(10) unsigned NOT NULL default '0',
>    `histone` varchar(20) default NULL,
>    PRIMARY KEY  (`read_id`),
>    KEY `chr` (`chr`),
>    KEY `histone` (`histone`)
> ) ENGINE=MyISAM AUTO_INCREMENT=99694252 DEFAULT CHARSET=latin1
> 
> I'll post you the EXPLAIN statement once its finished adding the index.
> 
> I have to confess to being in a state of shock at only having  
> constructive responses to my post, and (so far at least) none asking  
> "why would you want to insert 100 million rows into such a sad excuse  
> for a relational database anyway its not a database cause it doesn't  
> have any foreign keys and really you'd be better off using PG and  
> blah, blah, blah...." Is this what happens when the sun comes out?
> 
> 
> Chris.
> 
> 
> 
> On 8 May 2008, at 15:25, Robbie Bow wrote:
> 
> > Christopher Jones wrote:
> >
> >> With MySQL 4.0.20 running on Apple XServe dual G5 2.5GHz, 2Gb RAM;
> >>
> >> mysql> select * from histones where chr='1' and location > 10000 and
> >> location < 20000;
> >
> > Can you gives us the result of running this query:
> >
> > SHOW CREATE TABLE `histones`;
> >
> > and
> >
> > EXPLAIN select * from histones where chr='1' and location > 10000 and
> > location < 20000;
> >
> > Just so we can see the storage type, indexes &c. and how the query is
> > performing its search.
> >
> > Cheers
> >
> > PS apologies to the admins for double-posting with an amendment. First
> > message went from a unregistered address of mine.
> 


More information about the london.pm mailing list