I can't find any info regarding my question. This is more theoretical question.
For example, i have table keywords.
CREATE TABLE IF NOT EXISTS `keywords` (
`kid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`language_id` int(11) NOT NULL,
`keyword` varchar(120) NOT NULL,
PRIMARY KEY (`kid`),
UNIQUE KEY `custom_idx` (`language_id`,`keyword`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
My server has 1GB of free RAM memory. My table has millions of rows and size of my custom_idx is more than 1GB. Index can't fit into RAM memory. What would mysql do ? Is only part of this index will be stored in the memory ? Will this break BTREE/Clustered index performance dramatically ?
Also, if size of my index can't fit into innodb_buffer_pool_size limits, what would happen ?
Is replication is the answer to enormous InnoDB databases where indexes can't fit into RAM memory ?
I need to keep all my indexes in RAM ? What if my db size is more than 500gb?
Best Answer
InnoDB caches both data pages and index pages into the InnoDB Buffer Pool
MyISAM caches index pages only. In fact, you can do something interest if you combine replication with MyISAM.
SUGGESTION #1
Since there only 6700 spoken languages on Earth, you should use SMALLINT for language_id instead of INT. Makes for a smaller table and smaller index.
SUGGESTION #2
If you use MySQL Replication, try out this crazy idea: Convert the
keywords
table on the Slave to MyISAM. Leave the Master's Copy of thekeywords
as InnoDB.You could run this query on the Slave ONLY to convert it...
SUGGESTION #3
Once you make the
keywords
table MyISAM on the Slave, you could create a dedicated MyISAM Key Cache just forkeywords
as follows (Example: Setup 512M KeyCache forkeywords
):First create a script on the Slave
Next, create the following entry for the startup script in /etc/my.cnf on the Slave
Then, just restart mysql
This keeps keyword index pages away from the general MyISAM Key Cache and in a dedicated cache.
SUGGESTION #4
Perform your keyword lookups on the Slave
I hope this helps !!!