sql >> データベース >  >> RDS >> Mysql

MySQLでクエリを最適化および修正するためのヘルプを求めるにはどうすればよいですか?

    SHOWCREATETABLEを使用する

    これはあなたの言葉がこれまでにできたよりもあなたのテーブルについて私にもっと教えてくれます:

    mysql> show create table magic\G
    *************************** 1. row ***************************
           Table: magic
    Create Table: CREATE TABLE `magic` (
      `id` int(11) DEFAULT NULL,
      `what` varchar(255) DEFAULT NULL,
      `the` datetime DEFAULT NULL,
      `heck` text,
      `soup_is_good` double DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    

    警告 :テーブルに70列ある場合は、不要な列を省略してください 。何が必要ですか?

    • 参加しているフィールド
    • 選択されたフィールド
    • フィールドの場所

    EXPLAINを使用

    これにより、現在機能しているが、おそらく遅いクエリを最適化するための最善の方法を確認できます。

    mysql> explain select *     from magic\G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: magic
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 1
            Extra: 
    1 row in set (0.00 sec)
    

    \Gを使用

    右にスクロールする必要があるのは一般的に ご不便をおかけします。

    通常:

    mysql> select * from magic;
    +------------+-------------------------------+---------------------+-------------------+--------------+
    | id         | what                          | the                 | heck              | soup_is_good |
    +------------+-------------------------------+---------------------+-------------------+--------------+
    | 1000000000 | A really long text string yay | 2009-07-29 22:28:17 | OOOH A TEXT FIELD |        100.5 | 
    +------------+-------------------------------+---------------------+-------------------+--------------+
    1 row in set (0.00 sec)
    

    より良い:

    mysql> select * from magic\G
    *************************** 1. row ***************************
              id: 1000000000
            what: A really long text string yay
             the: 2009-07-29 22:28:17
            heck: OOOH A TEXT FIELD
    soup_is_good: 100.5
    1 row in set (0.00 sec)
    

    警告: \ Gは、明らかに1行のデータを複数の行に変換します。これは、データのいくつかの行に対しても同様に面倒になります。一番よく見えることをしてください。

    不愉快に大きなデータのチャンクには外部のペーストビンを使用します:

    あなたの期待を教えてください

    • 遅いですか? -私たちはあなたにとって何が遅いのかわかりません。秒、分、時間?知るのに役立ちます。
    • 高速 -これもわかりません。高速に期待することは何ですか?
    • 頻度 -これは1回だけ実行する予定のクエリですか?毎日? 1日に数百回または数千回?これは、十分であるかどうかを知るのに役立ちます 。


    1. MySQLを使用した既存のデータベースの接続

    2. SQLiteで英数字以外の文字のみを含む行を返す

    3. groupbyとLaravelで最新の行を取得する

    4. c9.io-node.jsプラットフォームでmysql接続を確立するためのホストアドレスを見つける方法