我有一个非常大的表,我做了一个非常简单的查询就像id查找ups。 由于表行增加,查询随着时间变慢。 我在第二秒执行了大约300个查询,它使我的脚本运行缓慢,内存达到99%(内存低于数据库的大小) 我想对表进行分区和子分区以获得最佳性能,这里是我的表(30个表中有这样的表),请添加一个代码,因为我对分区非常陌生,而且知之甚少。 select查询只是id查找和简单插入的where子句。 我想升级内存要高于数据库大小,但我想避免它,我不知道它是否会解决问题更好,然后分区。通过主键和2个索引分区和子分区mysql表来提高性能
CREATE TABLE `books` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`picture` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`url` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `url` (`url`(333)),
INDEX `name` (`name`)
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=937
这里是我的查询的一些例子:
SELECT id FROM books WHERE url = 'blabla';
INSERT INTO user_books SET book_id = '3', user_id = '10';
每个查询大约需要0.05-0.2秒
我得到了在每个表大约5-10万行。
DB大小为10GB我想到了升级内存至16GB
“非常大”的行数?你执行的查询的例子是什么?解释计划是什么样的?每个查询需要多长时间? –
@Derek我用你问的细节编辑了问题。 – Ben
如果可能,使用innodb并利用聚簇索引http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –