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

MysqlはSELECT速度を改善します

    ここで私の答えを読むのに時間をかけてください:(あなたと同じようなボリュームを持っています)

    5億行、0.02秒で1500万行の範囲スキャン。

    MySQLとNoSQL:適切なものを選択するのを手伝ってください

    次に、テーブルエンジンを次のようにinnodbに修正します。

    create table tag_date_value
    (
    tag_id smallint unsigned not null, -- i prefer ints to chars
    tag_date datetime not null, -- can we make this date vs datetime ?
    value int unsigned not null default 0, -- or whatever datatype you require
    primary key (tag_id, tag_date) -- clustered composite PK
    )
    engine=innodb;
    

    代わりに、次のものを主キーと見なすことができます。

    primary key (tag_id, tag_date, value) -- added value save some I/O
    

    ただし、値がLARGE varcharタイプではない場合に限ります!

    以前と同じようにクエリ:

    select
     tag_date, 
     value
    from
     tag_date_value
    where
     tag_id = 1 and
     tag_date between 'x' and 'y'
    order by
     tag_date;
    

    これがお役に立てば幸いです:)

    編集

    言及するのを忘れました-エンジンタイプをmysiamからinnodbに変更するためにaltertableを使用するのではなく、データをcsvファイルにダンプし、新しく作成された空のinnodbテーブルに再インポートします。

    エクスポートプロセス中にデータを注文していることに注意してください-クラスター化インデックスが重要です!

    エクスポート

    select * into outfile 'tag_dat_value_001.dat' 
    fields terminated by '|' optionally enclosed by '"'
    lines terminated by '\r\n'
    from
     tag_date_value
    where
     tag_id between 1 and 50
    order by
     tag_id, tag_date;
    
    select * into outfile 'tag_dat_value_002.dat' 
    fields terminated by '|' optionally enclosed by '"'
    lines terminated by '\r\n'
    from
     tag_date_value
    where
     tag_id between 51 and 100
    order by
     tag_id, tag_date;
    
    -- etc...
    

    インポート

    正しい順序でテーブルにインポートし直します!

    start transaction;
    
    load data infile 'tag_dat_value_001.dat' 
    into table tag_date_value
    fields terminated by '|' optionally enclosed by '"'
    lines terminated by '\r\n'
    (
    tag_id,
    tag_date,
    value
    );
    
    commit;
    
    -- etc...
    


    1. php5.2.6のmysqli_stmt_get_result代替

    2. mysqlデータをhtmlテーブルPHPに表示する

    3. Ubuntu 10.10(Maverick)でphpMyAdminを使用してMySQLを管理する

    4. MySQLはバックスラッシュを挿入していません