Мне нужно выбрать данные из одной таблицы, но в два этапа. Я попытался использовать IN() для этого:Как оптимизировать запрос?
SELECT * FROM my_table WHERE CONCAT(field1,'|',field2) IN
(
SELECT CONCAT(field1,'|',field2)
FROM my_table WHERE field3=12345 AND field4=0
)
Но он работает очень медленно. Как правильно его реализовать?
Обновление: во-первых, мне нужно выбрать из my_table все строки, которые удовлетворяют условию 'field3 = 12345 AND field4 = 0'. Во-вторых, мне нужно выбрать все строки с одинаковыми полями1 и поле2.
Является '' field3' и field4' индексной? Нормализованы ли ваши данные? Удалить подзапрос и присоединиться к таблицам? –
Предполагаю, что вы заменили свое реальное имя таблицы на 'my_table'. Вы действительно используете одну и ту же таблицу в инструкции from и во вложенном элементе? Потому что ... все, что не нужно, то. Если бы они были двумя разными таблицами, я мог бы понять. –
Почему вы делаете эту операцию 'CONCAT' на Земле? Я что-то упускаю, или это будет возвращать те же результаты, что: 'SELECT * FROM my_table WHERE field3 = 12345 AND field4 = 0'? – David