MySQLテーブル-パフォーマンス、インデックスの数

Pavel Straka

私はこの構造のテーブルを持っています:

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クエリをログに記録していますが、ログから次のことがわかります。

  1. INSERTテーブルにゆっくりと入ります。

    INSERT INTO supplies VALUES (11, 'userName', 18, 30, 'pound', 20) ; 
    
  2. DELETEテーブルから遅い

    DELETE FROM supplies WHERE cycle_id = 6 AND market_id = 18 AND subject_id =  'userName' ;
    

何を改善できますか?

PRIMARYキーは4つの列で構成されているため、インデックスを変更すると役立つと思います(一部は偶数ですvarchars)。しかし、どのようにインデックスを変更する必要がありますか?

みんな、ありがとう。

アンドレ・リマ

フィールドが1つだけの主キーを作成する必要があります。これは基本的なパフォーマンスの最適化です

CREATE TABLE `supplies` (
 `supplies_id` int(11) NOT NULL AUTO_INCREMENT,
 `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 (`supplies_id`),
 INDEX `index` (`subject_id` ASC,`market_id` ASC,`cycle_id` ASC,`price` ASC))
 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

もう1つの可能な改善は、カスケード制約を削除することです。それらが本当に必要かどうかを確認してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ApacheIgniteインデックス作成のパフォーマンス

分類Dev

SQLiteインデックスのパフォーマンス

分類Dev

SurfaceBookのWindowsパフォーマンスインデックス

分類Dev

インデックス作成のJavascriptパフォーマンス

分類Dev

SQLテーブルのパフォーマンスを最適化する-インデックス作成

分類Dev

mysql selectパフォーマンス(インデックス付きの多くの変数とインデックス付きの変数が少ない)

分類Dev

Elasticsearchのインデックスタイプ、パフォーマンスの理由

分類Dev

Mysql-DATETIMEフィールド(インデックス付き)のパフォーマンスのクエリ

分類Dev

変数でインデックスを作成するときのSD []のパフォーマンスの問題

分類Dev

CouchDBビューインデックスのパフォーマンス

分類Dev

SQLServerでのインデックス作成のパフォーマンス

分類Dev

oracledbのluceneインデックスの作成-パフォーマンス

分類Dev

MYSQLフォロワーシステム:フォロワーテーブルのインデックス作成

分類Dev

ArangoDB:配列要素のパフォーマンスインデックス

分類Dev

Solrのインデックス作成方法とパフォーマンス

分類Dev

インデックス付き列のパフォーマンスで文字列関数を使用するSQL

分類Dev

MYSQLテーブルのインデックスを削除して再作成すると、パフォーマンスが向上しますか?

分類Dev

Elasticsearchのインデックス作成パフォーマンス:スロットルマージ

分類Dev

ベクトルサブセットのパフォーマンス:名前とインデックス

分類Dev

スフィンクスのインデックス作成パフォーマンスを考える

分類Dev

別のテーブルのサブクエリ数に対するMYSQLのパフォーマンス

分類Dev

クイルスパンブロットフォーマット

分類Dev

Postgresタイムスタンプインデックスのパフォーマンス

分類Dev

10進列タイプのMySQLインデックスのパフォーマンス

分類Dev

XPath明示的インデックスフィルターのパフォーマンス

分類Dev

フラッシュディスクを使用したエアロスパイクのパフォーマンス

分類Dev

パフォーマンスに関する空のElasticSearchインデックスのオーバーヘッド

分類Dev

インデックスを使用してmySqlクエリのパフォーマンスを最適化する

分類Dev

インデックス付きビューのクエリ中のWHERE句のパフォーマンス

Related 関連記事

  1. 1

    ApacheIgniteインデックス作成のパフォーマンス

  2. 2

    SQLiteインデックスのパフォーマンス

  3. 3

    SurfaceBookのWindowsパフォーマンスインデックス

  4. 4

    インデックス作成のJavascriptパフォーマンス

  5. 5

    SQLテーブルのパフォーマンスを最適化する-インデックス作成

  6. 6

    mysql selectパフォーマンス(インデックス付きの多くの変数とインデックス付きの変数が少ない)

  7. 7

    Elasticsearchのインデックスタイプ、パフォーマンスの理由

  8. 8

    Mysql-DATETIMEフィールド(インデックス付き)のパフォーマンスのクエリ

  9. 9

    変数でインデックスを作成するときのSD []のパフォーマンスの問題

  10. 10

    CouchDBビューインデックスのパフォーマンス

  11. 11

    SQLServerでのインデックス作成のパフォーマンス

  12. 12

    oracledbのluceneインデックスの作成-パフォーマンス

  13. 13

    MYSQLフォロワーシステム:フォロワーテーブルのインデックス作成

  14. 14

    ArangoDB:配列要素のパフォーマンスインデックス

  15. 15

    Solrのインデックス作成方法とパフォーマンス

  16. 16

    インデックス付き列のパフォーマンスで文字列関数を使用するSQL

  17. 17

    MYSQLテーブルのインデックスを削除して再作成すると、パフォーマンスが向上しますか?

  18. 18

    Elasticsearchのインデックス作成パフォーマンス:スロットルマージ

  19. 19

    ベクトルサブセットのパフォーマンス:名前とインデックス

  20. 20

    スフィンクスのインデックス作成パフォーマンスを考える

  21. 21

    別のテーブルのサブクエリ数に対するMYSQLのパフォーマンス

  22. 22

    クイルスパンブロットフォーマット

  23. 23

    Postgresタイムスタンプインデックスのパフォーマンス

  24. 24

    10進列タイプのMySQLインデックスのパフォーマンス

  25. 25

    XPath明示的インデックスフィルターのパフォーマンス

  26. 26

    フラッシュディスクを使用したエアロスパイクのパフォーマンス

  27. 27

    パフォーマンスに関する空のElasticSearchインデックスのオーバーヘッド

  28. 28

    インデックスを使用してmySqlクエリのパフォーマンスを最適化する

  29. 29

    インデックス付きビューのクエリ中のWHERE句のパフォーマンス

ホットタグ

アーカイブ