我有表,這種結構:MySQL表 - 性能,指標數
CREATE TABLE `supplies` (
`cycle_id` int(11) NOT NULL,
`subject_id` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`market_id` int(11) NOT NULL,
`price` int(11) NOT NULL,
`currency_id` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`offered_order` bigint(20) DEFAULT NULL,
PRIMARY KEY (`subject_id`,`market_id`,`cycle_id`,`price`),
KEY `fk_supplies_subjects` (`subject_id`),
KEY `fk_supplies_markets` (`market_id`),
KEY `fk_supplies_currencies` (`currency_id`),
CONSTRAINT `fk_supplies_currencies` FOREIGN KEY (`currency_id`) REFERENCES `currencies` (`currency_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_supplies_subjects` FOREIGN KEY (`subject_id`) REFERENCES `subjects` (`subject_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_supplies_markets` FOREIGN KEY (`market_id`) REFERENCES `markets` (`market_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
表有大約20000行。我的表現有問題。我日誌記錄正在服用時間長的SQL查詢和從日誌中我可以看到:
慢
INSERT
s轉換表。INSERT INTO supplies VALUES (11, 'userName', 18, 30, 'pound', 20) ;
從錶慢
DELETE
小號DELETE FROM supplies WHERE cycle_id = 6 AND market_id = 18 AND subject_id = 'userName' ;
我能怎麼改善?
我想,改變索引會有所幫助,因爲PRIMARY
鍵是由4列組成(有些甚至是varchars
)。但我應該如何更改索引?
謝謝大家。
你爲什麼選擇非整數ID? – Strawberry
@Strawberry - 我沒有設計這張桌子,我的目標是優化它。我會將id更改爲整數。 –
在'PRIMARY KEY'中包含'price'似乎並不正確;請解釋。 –