私は大きな大きなテーブル(InnoDB)を持っています。このテーブルには、基本的に場所の緯度と経度が記載された場所の名前が付いています。私のクエリは次のようなものです
SELECT columns FROM table
WHERE latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
AND location LIKE '%mcdonalds%'
唯一のインデックスは、自動インクリメント列のプライマリインデックスです。
InnoDBを使用したいので、FULLTEXTはオプションではありません
私が試したオプションの1つは、緯度と経度にインデックスを追加して、
SELECT id FROM table WHERE
latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
それから私はします
$stringOfIds = implode(",",$result);
SELECT columns FROM table WHERE id IN ($stringOfIds)
AND location LIKE '%mcdonalds%'
ただし、$ resultには数千のエントリが含まれる可能性があり、メモリを大量に消費するため、拡張性はあまり高くありません。
今のところ、私は全表スキャン(上記の最初のクエリ)に頼っていますが、クエリごとに0.5〜1秒かかるので、助けていただければ幸いです。
ありがとう