のカウントは、私がこのような構造を持つテーブルがある: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
表は、約20,000行があります。パフォーマンスに問題があります。テーブルに
:私は長い時間を取って、私が見ることができるログからされているSQLクエリをログに記録しています。テーブルから
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' ;
INSERT
のスロー
私は何を向上させることができますか?
PRIMARY
のキーは4列で構成されており(一部はvarchars
であるため)、インデックスを変更すると役立ちます。しかし、どのようにインデックスを変更する必要がありますか?
ありがとうございました。
なぜ整数以外のIDを使用することにしましたか? – Strawberry
@Strawberry - 私はこのテーブルを設計しなかった、私の目標はそれを最適化することです。 idsを整数に変更します。 –
'PRIMARY KEY'に' price'を含めるのは正しいとは思われません。説明してください。 –