私は自分の DB をより最適化しようとしており、インデックス作成を始めていますが、正しく行う方法がわかりません。
私はこのクエリを持っています:
$year = date("Y");
$thisYear = $year;
//$nextYear = $thisYear + 1;
$sql = mysql_query("SELECT SUM(points) as userpoints
FROM ".$prefix."_publicpoints
WHERE date BETWEEN '$thisYear" . "-01-01' AND '$thisYear" . "-12-31' AND fk_player_id = $playerid");
$row = mysql_fetch_assoc($sql);
$userPoints = $row['userpoints'];
$sql = mysql_query("SELECT
fk_player_id
FROM ".$prefix."_publicpoints
WHERE date BETWEEN '$thisYear" . "-01-01' AND '$thisYear" . "-12-31'
GROUP BY fk_player_id
HAVING SUM(points) > $userPoints");
$row = mysql_fetch_assoc($sql);
$userWrank = mysql_num_rows($sql)+1;
これをインデックス化する方法がわかりませんか?fk_player_id のインデックスを作成しようとしましたが、まだすべての行を調べています (287937)。
EXPLAINでこれを返す日付フィールドにインデックスを付けました:
1 SIMPLE nf_publicpoints range IDXdate IDXdate 3 NULL 143969 プッシュ条件で where を使用。一時的な使用...
また、同じテーブルへの呼び出しが 2 つあります。1 回で実行できますか?
これをどのようにインデックス化するか、またはよりスマートに行うことができますか?