我有一個非常大的表,我做了一個非常簡單的查詢就像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 –