2017-06-04 5 views
0

私は今 mysql: multiple indexes advicemysqlの:削除クエリでのインデックスは

私は少し別の問題に焦点を当てたいと思いインデックスに提案を求め、ここでクエリを選択しました:私もで行の多くを削除する必要があります同じ時間(あなたが頼む場合には、私のdbは地図作成ツールをサポートしているので、たくさんの挿入と削除があり、ユーザーがマップ要素を追加したり削除したりする度に再挿入します。 インデックスは削除にも使用されますか?私は、テーブル1を新しいテーブル2にコピーして、削除されていないすべての要素を除外することができると想像しました(selectを使用しています)、古いtable1を削除してtable2をtable1にコピーすると、table1は必要な行だけで終わります。もちろん、削除操作がインデックスを使用する場合、selectがこれを行うのと同じ方法では無駄です。私は非常に大きなテーブルが何百万行に達するかもしれないと強調します。 最良のアプローチは何ですか?

編集:これはショー作成テーブルです

|地図| map
px NULL進(7,3)NOT NULL、
py進(7,3)NOT、
pz進(7,3)NOT NULL、
rx進(7,3)NOTにはCREATE TABLE NULL、
ry進(7,3)NOT NULL、
rz進(7,3)NOT NULL、
sx進(7,3)NOT NULL、
sy進(7,3)NOT NULLと、
sz小数(7,3)NOT NULL、
a TINYINT(1)NULL NOT、
b TINYINT(1)NULL NOT、
c TINYINT(1)NOT NULL、
d TINYINT(1)NULL NOT 、
e TINYINT(1)NOT NULL、
f TINYINT(1)NOT NULL、
g TINYINT(1)NOT NULL、
h TINYINT(1)NULL NOT、
i TINYINT(1)NULL NOT、
j TINYINT(1)NULL NOT、
k TINYINT(1)NULL NOT、
l TINYINT(1)NULL NOT、
mテキスト、
KEY aa )、
KEY bb)、
KEY cc)、
KEY dd
)ENGINE = InnoDB DEFAULT CHARSET = latin1 |

+0

スタックオーバーフローは、コードの記述方法に関する提案を得る場所ではありません。あなたがしたいことを考え、コードをどのように動作させるか、最も効率的な方法が何であり、コーディングするかを計画します。紙とペンを使って、創造的である。簡単な方法を選択しないでください。繰り返しますが、これは他の人がコードを書く方法を教えてくれる場所ではありません。将来他の人に役立つと思われる質問がある場合は、編集して再投稿してください。それ以外の場合は、この質問を削除するようアドバイスします。 –

+0

私の要求はコーディングに関するものであり、実際には私のコードを扱うことができません。私のdbは私に頭痛を与えています。私の質問は非常に高いレベルの概念とベストプラクティスです。 –

+0

インデックス作成の問題(現時点では)を無視して、 'DELETE'の外観を見てみましょう。 –

答えて

0

「更新された」100万行を扱うための手法は複数あります。

  1. 完全な交換の場合は、新しいテーブルを作成してから交換してください(RENAME TABLE)。

  2. 「更新」はINSERTまたはUPDATEに必要がある場合...つまり、一部の行が新しく追加され、いくつかは次の2つのいくつかの組み合わせを必要とする場合INSERT ... ON DUPLICATE KEY UPDATE ...

  3. を見て、その後、若干の変更を必要とし、プラスDELETEingいくつかの行は、より扱いにくくなりますが、おそらく非常に少数のSQL文で実行できます。ループはありません。 CREATEを入力し、変更セットを(LOAD DATA?)に入力します。マルチテーブルDELETEを実行します。 「新しい」行にコピーするにはINSERT ... SELECT .. LEFT JOIN ..を実行します。 IODKUまたはマルチテーブルUPDATEUPDATEsを実行しますか?私はそのうちのいくつかについて議論しますhere

私はあなたがしなければならないことを完全にgrokしていません。これらのテクニックのどれが近いと思いますか?私が提案したものにあなたの要件を近づけることができますか?おそらく私はより具体的にすることができます。 SHOW CREATE TABLEを組み込み、挿入/削除/更新の対象を決定する役割を果たす列を指摘することはおそらく有益でしょう。

そして、はい、INDEXesは、DELETEsUPDATEsに役立ちます。

+0

私はshow createテーブルを追加しました。関連する列は、一致が行われるa、b、c、dであり、一致した列は、削除したい地図データのグループを極端な精度で定義することができます。列pxとpzは範囲と照合されます(マップ上のオブジェクトの位置を表します)。私の懸案事項は、a、b、c、dで定義されているオブジェクトの全範囲を削除できることです。その後、dbはpxとpz範囲内を検索します。それは完全な交換や更新では決してないでしょう、データは挿入されるか、または削除されます。 –

+0

'px = constant'を使用しますか?または 'px BETWEEN .. and ..'? –

+0

範囲をテストして、px> = "left limit"かつpx <= "right limit"となるようにします。下限と上限に対してテストされるpzについても同様です。 –

関連する問題