Found a post regarding this in the mailing list archive, but no response to
it:
> Brian Blood brian at macserve.net
> Thu Nov 27 16:56:42 CET 2003
> why is there both a Primary and Unique index on the primary key field on
> these tables?
> aliases
> mailboxes
> messageblks
> messages
>From the CVS this morning (1.17.6.1)
------------
CREATE TABLE messages (
message_idnr bigint(21) NOT NULL auto_increment,
mailbox_idnr bigint(21) DEFAULT '0' NOT NULL,
messagesize bigint(21) DEFAULT '0' NOT NULL,
seen_flag tinyint(1) default '0' not null,
answered_flag tinyint(1) default '0' not null,
deleted_flag tinyint(1) default '0' not null,
flagged_flag tinyint(1) default '0' not null,
recent_flag tinyint(1) default '0' not null,
draft_flag tinyint(1) default '0' not null,
unique_id varchar(70) NOT NULL,
internal_date datetime default '0' not null,
status tinyint(3) unsigned zerofill default '000' not null,
rfcsize bigint(21) DEFAULT '0' NOT NULL,
PRIMARY KEY (message_idnr),
KEY message_idnr (message_idnr),
UNIQUE message_idnr_2 (message_idnr)
);
CREATE TABLE messageblks (
messageblk_idnr bigint(21) NOT NULL auto_increment,
message_idnr bigint(21) DEFAULT '0' NOT NULL,
messageblk longtext NOT NULL,
blocksize bigint(21) DEFAULT '0' NOT NULL,
PRIMARY KEY (messageblk_idnr),
KEY messageblk_idnr (messageblk_idnr),
KEY msg_index (message_idnr),
UNIQUE messageblk_idnr_2 (messageblk_idnr)
) TYPE=MyISAM;
----------------------
The messages table has the following keys defined:
PRIMARY KEY (message_idnr),
KEY message_idnr (message_idnr),
[second key used to be UNIQUE]
And messageblks:
PRIMARY KEY (message_idnr),
KEY message_idnr (message_idnr),
Is there any point to this duplication? Does it give any speed benefits I'm
not aware of? Otherwise it's just using up space and causing another key
write to be required.
[I'm playing around to see if MySQL 4.1's index preloading will give any
gain; so trying to optimise the keys required as much as possible]
Regards,
Mark.