0

1 つのテーブル パケット
パケットには 2 つのフィールド id と total が含まれ
ており、どちらも bigint 長さ 20 であり、主キー
のみ id は
すべてのレコードで自動インクリメントです total = id
私は 10000 レコードを取得しました id = 1 - 10000 と total = 1 - 10000

私は2つのほぼ同一のクエリを取得しました。1つは非常に長いロード時間で、もう1つはほぼ瞬時に完了します。

非常に長いロード時間:

@i = 0 に設定します。
SELECT *
FROM パケットを p1
WHERE p1.total in ( SELECT p2.total
FROM パケットを p2 として ( ( @i := ( @i + 1 ) )

非常に短いロード時間:

@i = 0 に設定します。
SELECT *
FROM パケットを p1
WHERE p1.id in ( SELECT p2.id
FROM パケットを p2 として ( ( @i := ( @i + 1 ) )

これは、id と total の値が同じ場合に発生します。

4

1 に答える 1

0

それらは両方ともbigint長20であり、主キーです

1 つのテーブルに 2 つの主キーを含めることはできません。

インデックスがないようですpackets.total

それを作成して、それが役立つかどうかを確認してください:

CREATE INDEX ix_packets_total ON packets (total)
于 2009-04-06T20:28:41.110 に答える