このコードは小さなテーブルでも機能しますが、180万レコードのテーブルがあり、検索時間は約12秒です。私はテーブルのbツリーインデックスをclient_idとcustomernameでPhpmyadmin経由で作成し、スピードの変更はしません。私のテーブルには116列が含まれています。私はテーブルを複数のテーブルに分割し、joinコマンドを使用する必要がありますか?アイブ氏は、joinコマンドを見たが、そう誰かが簡単な例100万を超えるレコードを持つMySqlテーブルをインデックスする方法
$stmt = $conn->prepare("SELECT *, (3959 * acos(cos(radians(:currentlat)) * cos(radians(lat)) * cos(radians(longitude) - radians(:currentlon))
+ sin(radians(:currentlat)) * sin(radians(lat)))) AS distance FROM $live_table
WHERE (companyname like :name )
AND
is_active != :active_switch
HAVING distance < :mydistance ORDER BY client_id desc LIMIT $start, $limit");
$stmt->bindValue(':name' , "%$name%", PDO::PARAM_STR);
$stmt->bindValue(':currentlat' , "$currentlat", PDO::PARAM_STR);
$stmt->bindValue(':currentlon' , "$currentlon", PDO::PARAM_STR);
$stmt->bindValue(':mydistance' , "$mydistance", PDO::PARAM_STR);
$stmt->bindValue(':active_switch' , "$active_switch", PDO::PARAM_STR);
実際に私は何とかインデックスを作成する必要がある検索がたくさんある約15のフィールドを持っています。上記は私が上記の質問のために作ることができる最も簡単です。私は住所、市、州などのフィールドを持っています... –
SQLの質問、特にクエリのパフォーマンスに関するこの提案のセットをお読みください。 http://meta.stackoverflow.com/a/271056/ –
クエリごとに「3959」が変更されますか? – nogad