We have a large table, 13mm+ records. Specifically its a phplist table, structure is below.
Running this query:
select sum(clicked) from phplist_linktrack where messageid = 113;
causes a full table scan to happen as is evident by running the query through explain.
What’s odd is that the same query using a different messageid does use the messageid index correctly.
My only “guess” is that the optimizer is seeing many records for messageid 113 and is opting to do a full scan rather than use the index.
Even using “use index” doesn’t force the issue.
mysql> show create table phplist_linktrack \G
*************************** 1. row ***************************
Table: phplist_linktrack
Create Table: CREATE TABLE phplist_linktrack (
linkid int(11) NOT NULL AUTO_INCREMENT,
messageid int(11) NOT NULL,
userid int(11) NOT NULL,
url varchar(255) DEFAULT NULL,
forward text,
firstclick datetime DEFAULT NULL,
latestclick timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
clicked int(11) DEFAULT ‘0’,
PRIMARY KEY (linkid),
UNIQUE KEY messageid (messageid,userid,url),
KEY midindex (messageid),
KEY uidindex (userid),
KEY urlindex (url),
KEY miduidindex (messageid,userid),
KEY miduidurlindex (messageid,userid,url)
) ENGINE=MyISAM AUTO_INCREMENT=13206016 DEFAULT CHARSET=latin1