sql >> データベース >  >> RDS >> Mysql

MySQL8でポイントデータ型とst_distance_sphereを使用して最寄りの場所を検索する

    かもしれません 最良の解決策になります。最初に他の答えをいくつか取得しましょう...

    EXPLAIN SELECT ...とは いう? (これはあなたのQ2に答えるかもしれません。)

    他の回答に関係なく、クエリはテーブル全体をスキャンします。おそらくあなたはLIMIT ...が欲しいでしょう 最後に?

    役立つ可能性のあるもう1つのこと(アプリとオプティマイザーによって異なります):WHEREにバウンディングボックスを追加します 条項。

    いずれの場合も、実際にタッチされた行の数を正確に把握するには、次の手順を実行します。

    FLUSH STATUS;
    SELECT ...;
    SHOW SESSION STATUS LIKE 'Handler%';
    

    それらの答えを取り戻してください。その後、さらに繰り返すことができます。

    ステータスの表示後

    ええと、Handler_read_rnd_next 全表スキャンだったと言います。 1000と1001-LIMIT 1000はありましたか ?

    そのLIMITを推測します SPATIALの方法には考慮されていません 動作します。つまり、単純なことを行います-(1)すべての行をチェックし、(2)並べ替え、(3)LIMIT

    では、どうすればよいですか?

    プランA:Xマイル(km)を超える結果を望まないことを決定し、クエリに「バウンディングボックス」を追加します。

    プランB:Spatialを放棄し、タスクを実行するためのより複雑な方法を掘り下げます: http:// mysql.rjweb.org/doc.php/latlng




    1. PHPを使用して複数選択ドロップダウンからデータを取得してMySQLに挿入する

    2. タイムスタンプではなくDateTimeを選択したのはいつですか

    3. MySQL REPLACE()–サブストリングのすべてのインスタンスを別のストリングに置き換えます

    4. AndroidのリストビューアイテムをクリックしてデータベースからIDを取得する方法