300万件ほどのデータのあるinteger型のidを格納するテーブルで、MAX(id)とMIN(id)を求めようとしたらとんでもない時間がかかった。
同じSELECTでMINとMAXを求めたのが悪いようだ。別に求めてUNIONでくっつけると問題なかった。理由はよくわからない。
テーブル
CREATE TABLE ids (tid integer,primary key(tid));
検証コード
$time_start = microtime(true); for($i=0;$i<10;$i++){ $stmt = $pdo->prepare("SELECT MAX(tid),MIN(tid) FROM ids"); $stmt->execute(); } $time = microtime(true) - $time_start; echo "{$time} 秒\n"; $time_start = microtime(true); for($i=0;$i<10;$i++){ $stmt = $pdo->prepare("SELECT MAX(tid) FROM ids UNION SELECT MIN(tid) FROM ids"); $stmt->execute(); } $time = microtime(true) - $time_start; echo "{$time} 秒\n";
結果
2.2598919868469 秒 0.00030899047851562 秒
これでデータの数を増やせるぞ♡