がクエリ以下に説明すると、ユーザが検索したいスロークエリは、... ...あなたは、私は、クエリに慣れる現在のユーザーのための3つの変数を持っていることを知っている必要があり、それはより速く
$radius
選好が必要
$lat
ユーザの緯度
$lon
ユーザの経度
zipDataテーブル内の関連する列がありzipcode
lon
とlat
私が所望の半径内の他のすべてのユーザーを報告して正常に動作します。このクエリを持っている...
$query="
SELECT username FROM zipData,seekers
WHERE (POW((69.1*(lon-\"$lon\")*cos($lat/57.3)),\"2\")+POW((69.1*(lat-\"$lat\")),\"2\"))<($radius*$radius)
AND replace(seekers.postal,' ','') = zipData.zipcode;
";
私も一定の基準を満たす特定のユーザーのみを返すこのクエリを持っている...
$query="
SELECT *
FROM
(
SELECT a.username, MATCH(a.highlight) AGAINST (\"{$keywords}\" IN BOOLEAN MODE) AS score
FROM resume_highlights a
JOIN seekers ON a.username = seekers.username and seekers.resume_status = 1
HAVING score>0
UNION ALL
SELECT b.username, MATCH(b.skill,b.skill_list) AGAINST (\"{$keywords}\" IN BOOLEAN MODE) AS score
FROM resume_skills b
JOIN seekers ON b.username = seekers.username and seekers.resume_status = 1
HAVING score>0
UNION ALL
SELECT c.username, MATCH(c.education_title,c.education_organization) AGAINST (\"{$keywords}\" IN BOOLEAN MODE) AS score
FROM resume_education c
JOIN seekers ON c.username = seekers.username and seekers.resume_status = 1
HAVING score>0
UNION ALL
SELECT d.username, MATCH(d.employer_title,d.employer_organization) AGAINST (\"{$keywords}\" IN BOOLEAN MODE) AS score
FROM resume_employer d
JOIN seekers ON d.username = seekers.username and seekers.resume_status = 1
HAVING score>0
UNION ALL
SELECT e.username, MATCH(e.volunteer_title,e.volunteer_organization) AGAINST (\"{$keywords}\" IN BOOLEAN MODE) AS score
FROM resume_volunteer e
JOIN seekers ON e.username = seekers.username and seekers.resume_status = 1
HAVING score>0
) AS X
ORDER BY score desc
";
両方のクエリが独立して動作します。しかし、それらを1つのクエリに結合しようとすると、実行時間が非常に遅くなります。私はseekers.postal
zipData.lon
とzipData.lat
のインデックスを持っている
UPDATE
。私はそのトリックを行うだろうと仮定していただろうが、それはしませんでした。 2つのクエリをどのように組み合わせるべきかを知りたいので、クエリを作成しただけでよいかもしれません。私は、これはlinkは、あなたの答えを持っていると思う
私はseekers.postal zipData.lonとzipData.latにインデックスを持っていますが、それはトリックを行うと仮定していましたが、そうではありませんでした。最初の投稿の2つのクエリがどのように組み合わされるべきかを見たいので、クエリを作成したことがあるかもしれません。 –
'having'を使う代わりに、' where'は結果セットを制限して行を返すことをお勧めします。 –