I’m getting the below error in a Magento PHP file running a CREATE TABLE:
SQLSTATE[42000]: Syntax error or access violation: 1069 Too many keys specified; max 64 keys allowed
The code that triggers it is:
CREATE TABLE IF NOT EXISTS {$this->getTable('attributesplash_page')} (
`page_id` int(11) unsigned NOT NULL auto_increment,
`option_id` int (11) unsigned NOT NULL default 0,
`store_id` smallint(5) unsigned NOT NULL default 0,
`display_name` varchar(255) NOT NULL default '',
`image` varchar(255) NOT NULL default '',
`short_description` varchar(255) NOT NULL default '',
`description` TEXT NOT NULL default '',
`url_key` varchar(180) NOT NULL default '',
`page_title` varchar(255) NOT NULL default '',
`meta_description` varchar(255) NOT NULL default '',
`meta_keywords` varchar(255) NOT NULL default '',
`display_mode` varchar(40) NOT NULL default 'PRODUCTS',
`cms_block` int(11) unsigned NOT NULL default 0,
`is_enabled` int(1) unsigned NOT NULL default 1,
PRIMARY KEY (`page_id`),
KEY `FK_OPTION_ID_SPLASH_PAGE` (`option_id`),
CONSTRAINT `FK_OPTION_ID_SPLASH_PAGE` FOREIGN KEY (`option_id`) REFERENCES `{$this->getTable('eav_attribute_option')}` (`option_id`) ON DELETE CASCADE ON UPDATE CASCADE,
KEY `FK_STORE_ID_SPLASH_PAGE` (`store_id`),
CONSTRAINT `FK_STORE_ID_SPLASH_PAGE` FOREIGN KEY (`store_id`) REFERENCES `{$this->getTable('core_store')}` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='AttributeSplash: Page';
ALTER TABLE {$this->getTable('attributesplash_page')} ADD UNIQUE (option_id, store_id);
To me it looks like it’s only adding 3 Keys in there. Where are the extras coming from?
Researching the problem has simply turned up the fact that I need to reduce the items that are being used for keys, but I can’t see where the extra ones are in the code.
Is there any additional information that would be of use?
Just go through all of your attributes and set whether they are “Used in product listing” to ‘no’ and “Used for sorting in product listing” to ‘no’.
I have not experienced this problem in recent versions of Magento, however, the above worked for me once. I was then able to think again about what attributes I really needed to have on and where.