Фильтровать большое количество записей в MySQL при использовании INNER JOIN с двумя полями

sesach : ( 3959 * acos( cos( radians('.$_REQUEST['latitude'].') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$_REQUEST['longitude'].') ) + sin( radians('.$_REQUEST['latitude'].') ) * sin( radians( latitude ) ) ) ) <='.$_REQUEST['mile'];
0
задан gripen fighter 6 March 2019 в 04:07
поделиться

2 ответа

Можете ли вы попробовать это: 1. Создайте индекс для обеих таблиц в столбце id, если он еще не создан (это займет время).

  1. Попробуйте создать две временные таблицы log_1_tmp и log_2_tmp с данными, как показано ниже:
Query 1 - insert into log_1_tmp select * from log_1 where log_1.ip = '192.168.100.100'

Query 2 - insert into log_2_tmp select * from log_2 where log_2.ip = '192.168.100.100'
  1. Выполните запрос над двумя таблицами, и здесь вы можете удалить условие where из запрос.

Посмотрите, работает ли это.

0
ответ дан Ashish khare 6 March 2019 в 04:07
поделиться

Прежде всего, ваше текущее предложение LIMIT довольно бессмысленно, поскольку в запросе нет предложения ORDER BY. Не ясно , какие 100 записей вы хотите сохранить. Итак, вы можете использовать что-то вроде этого:

SELECT
    l1.datetime,
    l1.id,
    l1.name,
    l1.ip,
    l2.datetime,
    l2.mobile,
    l2.id
FROM log_1 l1
INNER JOIN log_2 l2
    ON l1.id = l2.id AND l1.datetime = l2.datetime
WHERE
    l1.ip = '192.168.100.100'
ORDER BY
    l1.datetime DESC
LIMIT 100;

Это вернет 100 самых последних совпадающих записей. Что касается ускорения этого запроса, один из способов как минимум ускорить объединение - добавить следующий индекс в таблицу log_2:

CREATE INDEX idx ON log_2 (datetime, id, mobile);

Предполагая, что MySQL выберет этот индекс, он должен сделать объединение происходит намного быстрее, потому что каждое значение id и datetime можно искать в B-дереве, а не выполнять ручное сканирование всей таблицы. Обратите внимание, что индекс также охватывает столбец mobile, который необходим для выбора.

0
ответ дан Tim Biegeleisen 6 March 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: