複数のレコードを選択する必要があります
私が使う
SELECT *
FROM `table`
WHERE `ID` =5623
OR `ID` =5625
OR `ID` =5628
OR `ID` =5621
このクエリは、phpで毎秒4回実行されます
これのためのより良い、より速い方法はありますか?
SELECT *
FROM `table`
where ID in (5263, 5625, 5628, 5621)
おそらくより良いですが、速くはありません。
人々が言ったことに加えて(どこにあるか):
1)IDがたくさんある場合は、IDを一時テーブルに貼り付け、その一時テーブルとの結合を実行することをお勧めします
2)テーブルにidのインデックスがあることを確認します
3)データのリアルタイム性が重要でない場合は、クエリ結果をアプリケーション側のキャッシュに配置します
SELECT *
FROM `table`
WHERE `ID` in (5623, 5625, 5628, 5621)
これについてさらに調査していると、興味深いブログに出くわしました post セットを使用して、IDのリストをCommon Table Expression(CTE)に作成し、結合することで、In句からSQLパフォーマンスを高速化する方法を説明していますその上で。
したがって、PHP以下に相当するものをコーディングして、最大のパフォーマンスを得ることができます。
DECLARE @idList varchar(256)
SET @idList = '5623, 5625, 5628, 5621'
;with ids (id) as
(
SELECT value FROM UTILfn_Split(@idList,',')
)
SELECT t.*
FROM table as t
INNER JOIN ids
ON t.ID = ids.id
SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)
しかし、1秒あたり4回は大量です。 データベースへのアクセスが少ない別のアプローチについて考えます。
もし、するなら
SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)
IDの数が大きくなりすぎない限り、問題はありません。 IDのインデックスを作成して、クエリの実行速度を上げることをお勧めします。
また、ロジックを変更することを検討してください。そうすれば、それほど多くのIDを渡す必要がなくなります。