20c/40t 256ギガバイトサーバー上の狭い行〜500mの分散テーブルにインデックスを作成するには数時間を要し、私の人生ではなぜそれが理解できません。この記事のよう Memsqlでインデックスを作成するのに時間がかかるのはなぜですか?
alter table users_userlocation add index date3 (date, user_id);
CREATE TABLE users_userlocation ( id bigint(20) unsigned NOT NULL, user_id mediumint(9) unsigned NOT NULL, lat float NOT NULL, lon float NOT NULL, speed decimal(4,2) NOT NULL, status_id tinyint(4) unsigned NOT NULL, date datetime NOT NULL, prev_date datetime DEFAULT NULL, next_date datetime DEFAULT NULL, point geographypoint DEFAULT null, /*!90618 SHARD */ KEY user_id (user_id), KEY date (date DESC,user_id), KEY point (point), KEY date2 (user_id,date DESC), KEY date3 (date,user_id) );
こんにちはアダム、返信ありがとうございます。上記の匿名化されたスキーマを追加しました(実際のカラム名は敏感です)。複数の日付/ユーザーインデックスの理由は、スキップリストのパフォーマンスを試してみることでした。たとえば、ある日付範囲での単純な選択カウント(*)は、予想よりも遅く実行されます(同じハードウェア上でGreenplumよりもはるかに遅い)。私はDESCインデックスを使用していたかどうか疑問に思っていたので、ASCオーダーで追加しています。 – QEternity
また、リーフあたり10〜20kの場合、コアごとに正しいですか?そして、FWIWは、インデックスを追加すると私のCPU使用量が最大になります。 – QEternity
はい、コアあたり10K〜20K行。ランダムなデータでテーブルのスキーマを簡単にテストしました。私のテストでは、変更はコア当たり16.5K行で実行されました(8コアで1600万行のテーブルを実行するには2分かかりました)。あなたが大量の書き込みワークロードを変更と同時に実行していた場合、大幅に遅くなる可能性があります(50%以上)。 –