Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Cоставной запрос и много AND и OR / 5 сообщений из 5, страница 1 из 1
26.03.2015, 10:48:48
    #38917416
zhurchick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cоставной запрос и много AND и OR
Приветствую вас Уважаемые форумчане.

Имеется составной индекс, а именно:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE INDEX _district ON users(district, village, street, house);

-- Так вот, корректно ли я составил запрос?

mysqli_query("SELECT * FROM `users`
    WHERE
        (district = 1 AND village = 1 AND street = 1 AND house = 1)

        OR

        (district = 1 AND village = 1 AND street = 2 AND house = 2)        

    LINIT 30;");

-- Обратите внимание на то, что до OR в первой строчке и в последней district и village равны 1

-- Можно было бы написать запрос вот так:

mysqli_query("SELECT * FROM `users`
    WHERE
        district = 1 AND village = 1 AND ((street = 1 AND house = 1) OR (street = 2 AND house = 2))

    LINIT 30;");

-- Второй запрос короче, но меня волнует другое, имеется ли разница в производительности? Почему да или почему нет?
-- Дело в том, что скрипт генерирует строку запроса из JSON и генерирует её так как я описал в первом запросе.



Буду благодарен за любой совет!
...
Рейтинг: 0 / 0
26.03.2015, 11:10:54
    #38917441
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cоставной запрос и много AND и OR
Тут форум по MySQL. И постить здесь PHP-код как минимум неправильно, для этого есть свой форум.

zhurchickимеется ли разница в производительности? Почему да или почему нет?
Первый запрос, возможно, сможет использовать индекс более эффективно, чем второй.

Ещё лучше будет запрос
Код: sql
1.
2.
3.
4.
(SELECT * FROM `users` WHERE district = 1 AND village = 1 AND street = 1 AND house = 1)
UNION ALL
(SELECT * FROM `users` WHERE district = 1 AND village = 1 AND street = 2 AND house = 2)
LIMIT 30



Однако следует заметить, что использование LIMIT без ORDER BY как правило есть глупо.
...
Рейтинг: 0 / 0
26.03.2015, 11:40:30
    #38917499
zhurchick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cоставной запрос и много AND и OR
AkinaОднако следует заметить, что использование LIMIT без ORDER BY как правило есть глупо.
Почему? Ведь по идеи, если будет найдено 30 соответствий, то выборка будет остановлена. Какой смысл в ORDER BY если он мне в данный момент не нужен?
...
Рейтинг: 0 / 0
26.03.2015, 11:52:24
    #38917516
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cоставной запрос и много AND и OR
zhurchick,
Потому что ты будешь получать случайный набор записей.
...
Рейтинг: 0 / 0
26.03.2015, 15:52:20
    #38917853
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Cоставной запрос и много AND и OR
zhurchickесли будет найдено 30 соответствий, то выборка будет остановлена. Какой смысл в ORDER BY если он мне в данный момент не нужен?Потому что тебе неизвестно, в каком порядке сервер будет выбирать эти записи. А самое главное - в следующий раз сервер имеет полное право изменить этот порядок, и ты получишь на тот же самый запрос совсем другие записи.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Cоставной запрос и много AND и OR / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]