Я использую таблицу MySQL для хранения данных вещей на карте, которые будет искать пользователь.Сайт позволяет пользователю добавлять дополнительные фильтры, чтобы сузить его результаты.
Основной MySQL Query:
SELECT listing_id, listings.property_1, property_2, address_1, address_2, city, listings.lat, listings.lng, img_subpath, photos, some_timestamp
FROM table
WHERE listings.lat BETWEEN 61.123 AND 61.124
AND listings.lng BETWEEN 40.123 AND 40.124
AND some_timestamp BETWEEN DATE_SUB( NOW(), INTERVAL 0 DAY) AND DATE_SUB( NOW(), INTERVAL 5 DAY)')
JOIN (SELECT price, lat, lng, MAX(some_timestamp) as latest FROM listings GROUP BY price, lat, lng) as t2', 'listings.price=t2.price AND listings.lat=t2.lat AND listings.lng=t2.lng AND listings.some_timestamp=t2.latest', 'inner')
LIMIT 200,0
Столбцы:
(индексированные столбцы выделены жирным шрифтом)
(столбцы, начинающиеся с property_
, являются дополнительными фильтрами, кроме первых 2)
- list_id int (8)
- url varchar (255)
- city varchar (32)
- somename varchar (32)
- цена int (7)
- price_per int (7)
- property_1 int (2)
- property_2 int (2)
- address_1 varchar (255)
- address_2 carchar (255)
- city varchar (64)
- statevarchar (32)
- mail int (6)
- some_timestamp timestamp
- another_timestamp timestamp
- lat float (10)
- lng float (10)
- текст описания
- img_subpath varchar (15)
- photos text
- reply_email varchar (255)
- phone varchar (16)
- property_3 tinyint (1)
- property_4 tinyint (1)
- property_5 tinyint (1)
- property_6 tinyint (1)
- property_7 tinyint (1)
- property_8 tinyint (1)
- property_9 tinyint (1))
- property_10 tinyint (1)
- property_11 tinyint (1)
- property_12 tinyint (1)
- property_13 tinyint (1)
- property_14 tinyint (1)
Проблема: База данных занимает слишком много времени (3-4 секунды) для получения результатов.Как можно увеличить скорость до <0,5 с, что было сделано на очень похожих сайтах? </p>
Если у меня есть 2 таблицы, первая таблица будет содержать только столбцы, участвующие в поиске, а следующая таблица содержит вседругие столбцы.Поэтому, когда происходит поиск, он ищет первую таблицу, получает listing_id
результатов, а затем использует предложение IN
для извлечения всех других данных из второй таблицы?
Пожалуйста, сообщите, спасибо!