Hi, I'm not sure I understand indexes properly. In this EXPLAIN, I expected the Cls (Classes) table to be of type ref with the key being ObjectID. I'm joining both identically as far as I can tell, on one of the columns in the primary key, which is set to a key itself, but Cls is joining on ALL. Why is it doing that?
Has it got something to do with the way my query is worded? Thanks in advance, Chris =EXPLAIN=================================================================== +---------+--------+------------------+----------+---------+-------------------------------------+------+--------------------------- -------------------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +---------+--------+------------------+----------+---------+-------------------------------------+------+--------------------------- -------------------+ | NPCSpl | index | PRIMARY | PRIMARY | 10 | NULL | 6034 | Using index; Using temporary; Using filesort | | ObjNPCs | eq_ref | PRIMARY | PRIMARY | 8 | const,NPCSpl.FileID,NPCSpl.ObjectID | 1 | Using where; Using index | | NPCs | eq_ref | PRIMARY,ObjectID | PRIMARY | 6 | ObjNPCs.FileID,ObjNPCs.ObjectID | 1 | | | Spl | ref | PRIMARY,ObjectID | ObjectID | 4 | NPCSpl.ObjectID_Spell | 15 | | | ObjSpl | eq_ref | PRIMARY | PRIMARY | 8 | const,Spl.FileID,Spl.ObjectID | 1 | Using where; Using index | | Cls | ALL | PRIMARY,ObjectID | NULL | NULL | NULL | 84 | Using where | | ObjCls | eq_ref | PRIMARY | PRIMARY | 8 | const,Cls.FileID,Cls.ObjectID | 1 | Using where; Using index | +---------+--------+------------------+----------+---------+-------------------------------------+------+--------------------------- -------------------+ =QUERY===================================================================== SELECT NPCs.FileID, NPCs.ObjectID, NPCs.Name, Spl.FileID as FileID_Spell, Spl.ObjectID as ObjectID_Spell, Spl.Name as Name_Spell FROM NPCs JOIN GroupedObjects ObjNPCs ON ( 1=ObjNPCs.GroupID AND NPCs.FileID=ObjNPCs.FileID AND NPCs.ObjectID=ObjNPCs.ObjectID ) JOIN NPCSpells NPCSpl ON ( ObjNPCs.FileID=NPCSpl.FileID AND ObjNPCs.ObjectID=NPCSpl.ObjectID ) JOIN Spells Spl ON ( Spl.ObjectID=NPCSpl.ObjectID_Spell ) INNER JOIN GroupedObjects ObjSpl ON ( 1=ObjSpl.GroupID AND Spl.FileID=ObjSpl.FileID AND Spl.ObjectID=ObjSpl.ObjectID ) JOIN Classes Cls ON ( Cls.ObjectID=NPCs.ObjectID_Class ) INNER JOIN GroupedObjects ObjCls ON ( 1=ObjCls.GroupID AND Cls.FileID=ObjCls.FileID AND Cls.ObjectID=ObjCls.ObjectID ) WHERE 2048 & NPCs.Services OR 2048 & Cls.Services ORDER BY NPCs.ObjectID; =TABLES==================================================================== CREATE TABLE `Spells` ( `FileID` smallint(5) unsigned NOT NULL default '0', `ObjectID` int(10) unsigned NOT NULL default '0', `Name` char(32) default NULL, `SpellTypeID` tinyint(4) NOT NULL default '0', `Cost` int(11) NOT NULL default '0', `Flags` set('0x1','0x2','0x4','0x8','0x10','0x20','0x40','0x80','0x100','0x200','0x400','0x800','0x1000','0x2000','0x4000','0x8000','0x10000 ','0x20000','0x40000','0x80000','0x100000','0x200000','0x400000','0x800000','0x1000000','0x2000000','0x4000000','0x8000000','0x10000 000','0x20000000','0x40000000','0x80000000') NOT NULL default '', PRIMARY KEY (`FileID`,`ObjectID`), KEY `ObjectID` (`ObjectID`) ) TYPE=MyISAM COMMENT='Spells' CREATE TABLE `Classes` ( `FileID` smallint(5) unsigned NOT NULL default '0', `ObjectID` int(10) unsigned NOT NULL default '0', `Name` varchar(32) NOT NULL default '', `AttrID_Pri0` tinyint(4) NOT NULL default '0', `AttrID_Pri1` tinyint(4) NOT NULL default '0', `SpecID` tinyint(4) NOT NULL default '0', `SkillID_Maj0` tinyint(3) unsigned NOT NULL default '0', `SkillID_Maj1` tinyint(3) unsigned NOT NULL default '0', `SkillID_Maj2` tinyint(3) unsigned NOT NULL default '0', `SkillID_Maj3` tinyint(3) unsigned NOT NULL default '0', `SkillID_Maj4` tinyint(3) unsigned NOT NULL default '0', `SkillID_Min0` tinyint(3) unsigned NOT NULL default '0', `SkillID_Min1` tinyint(3) unsigned NOT NULL default '0', `SkillID_Min2` tinyint(3) unsigned NOT NULL default '0', `SkillID_Min3` tinyint(3) unsigned NOT NULL default '0', `SkillID_Min4` tinyint(3) unsigned NOT NULL default '0', `Flags` set('Playable','0x2','0x4','0x8','0x10','0x20','0x40','0x80','0x100','0x200','0x400','0x800','0x1000','0x2000','0x4000','0x8000','0x 10000','0x20000','0x40000','0x80000','0x100000','0x200000','0x400000','0x800000','0x1000000','0x2000000','0x4000000','0x8000000','0x 10000000','0x20000000','0x40000000','0x80000000') NOT NULL default '', `Services` set('Weapons','Armor','Clothing','Books','Ingredients','Picks','Probes','Lights','Apparatus','Repair Items','Miscellaneous','Spells','Magic Items','Potions','Training','Spellmaking','Enchanting','Repair') default NULL, `Description` text, PRIMARY KEY (`FileID`,`ObjectID`), KEY `ObjectID` (`ObjectID`) ) TYPE=MyISAM COMMENT='Classes' -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]