powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите исправить простой запрос
25 сообщений из 56, страница 2 из 3
Помогите исправить простой запрос
    #38485433
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcКроме того, пока вы доживете до больших
обьемов -- структура данных и все апликация
поменяется на 90%...вот это куда весомее, чем какие-то там планы :)
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38486858
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал все вроде оптимально, только в этом месте вопрос:

Код: sql
1.
2.
3.
4.
5.
SELECT *,
	( select datetime
	from messages where messages.parent = topics.key)
FROM topics
LIMIT 10



Мне кажется что тут не правильно. Наверное выбираться будут все записи из таблицы topics, параллельно будут выбираться записи с условием из таблицы messages, и только потом будет отсечение всех кроме первых 10 штук.

А правильнее сначала выбрать записи из таблицы topics, отсечь все кроме первых 10, и потом по этим 10 выбирать с условием из таблицы messages.

Или это не важно, и оптимизатор все сам сделает как надо?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38486859
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исправил (наверное) вот так, правильно??:

Код: sql
1.
2.
3.
SELECT *,
	( select max(datetime) from messages where messages.parent = topics.key)
FROM (select * from topics LIMIT 10) as topics



В первом запросе ошибка, должно быть конечно вот так:

Код: sql
1.
2.
3.
4.
SELECT *,
	( select max(datetime) from messages where messages.parent = topics.key)
FROM topics
LIMIT 10
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38486879
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще вопрос в довесок к предыдущему: Сделал три запроса дающих нужный результат, какой быстрее?
Запросы конечно сильно упростил, убрал ограничивающие условия.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#1
select (select datetime from topics where topics.key = p.parent) datetime
from ( SELECT parent FROM messages GROUP BY parent ) p
#2
SELECT datetime
FROM topics
where topics.key in	( SELECT parent FROM messages ) # GROUP BY parent???
#3
SELECT topics.datetime
FROM topics
JOIN messages ON topics.key = messages.parent
GROUP BY datetime
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38486883
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavelкакой быстрее?выполните и посмотрите, вы всё-таки ближе к своему серверу, чем мы :)
D_PavelЗапросы конечно сильно упростил, убрал ограничивающие условия.здравствуйте, у меня есть запорожец и москвич, какой из них быстрее? кстати, на самом деле я заправляюсь бензином, но вы при ответе на вопрос считайте, что они работают на ДТ :)
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38486892
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теоретически москвич быстрее потому что у него соотношение (мощность, крутящий момент)/масса больше.
Можно ли так же ответить на мой вопрос?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38487021
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT datetime
FROM topics t
where exists(select 1 from messages m where m.parent=t.key)
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38487026
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, это ж MySQL... Хз, я про ответил MS SQL
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38487155
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelТеоретически москвич быстрееТеоретически если их заправить дизтопливом, то ни один, ни другой даже с места не сдвинутся. Пойдёт такой ответ? :)
А практически вам может ответить только оптимизатор на ваших данных.
Разве что второй вариант можно с вероятностью в 99.9% исключить, если у вас мускл версии 5.5 и ниже.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38488281
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не верно, у меня все запросы с места сдвигаются в любом варианте, так что такой ответ не годится.

Почему второй вариант можно исключить?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38488287
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavel, потому что in-subquery в версиях до 5.5 включительно оптимизатор практически всегда рассматривает как зависимый подзапрос, даже если он , как в вашем случае, независимый.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38488303
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему у меня так: индекс не используется в таблице topics
[img=http://pavel.cc/photo/screenshot(5).jpg] ссылка1

хотя вот ак используется:
[img=http://pavel.cc/photo/screenshot(6).jpg] ссылка2

PS: Чото картинки не вставляются
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38488311
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelПочемуПотому что 15236671
Абсолютно та же ситуация. Переписывайте через джойн, всё заработает как надо.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489435
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там написано что только для версии до 5.5.
через join то же самое, я это сразу проверил.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489732
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelТам написано что только для версии до 5.5.Ну вы ведь версию своего мускля вообще не озвучили. И не "до 5.5", а "до 5.5 включительно".
D_Pavelчерез join то же самоеЧто "то же самое"? Такой же план? С dependent subquery? Не верю! (с) Показывайте свой джойн.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489735
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eще не понятно, что показывает функция EXPLAIN: скриншот
Выбираются на самом деле все 15 записи с 4 различными значениями parent из таблицы messages, но эта функция в колонке rows показывает число 1. Почему там 1?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489737
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
***! Что вы хотите оптимизировать на 15 записях?!! Какие нахрен планы на 15 записях?? Наполните таблицу данными, близкими к реальным, а лучше реальными, и только потом можно будет о чём-то говорить.
И это, кстати, вообще другой запрос, с выбором других полей и без группировки.
facepa~1.bmp
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489744
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть если я сказал что у меня 15 записей, то вы не знаете ответ на мой вопрос? Какие группировки нужны? Как изменить запрос чтобы использовались индексы?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489748
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelТо есть если я сказал что у меня 15 записей, то вы не знаете ответ на мой вопрос?А вопрос-то какой? "Какой запрос быстрее"? Тогда ответ будет таким: на 15 записях никакой разницы.
D_PavelКакие группировки нужны? а вот этот вопрос вообще ко мне??! это ваш запрос, вам лучше знать, что вы хотите получить в результате - а добавление группировки изменит этот самый результат.
D_PavelКак изменить запрос чтобы использовались индексы?Если у вас 15 записей, то никакие индексы не нужны вообще. Серверу проще прочитать обе таблицы целиком.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489757
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot tanglir]А вопрос-то какой? "Какой запрос быстрее"? Тогда ответ будет таким: на 15 записях никакой разницы.[quot tanglir] нет. Вопрос был "Почему так http://pavel.cc/photo/screenshot(16).jpg используются индексs, а вот так http://pavel.cc/photo/screenshot(15).jpg не используются, и как сделать чтобы тоже использовались?"

tanglir а вот этот вопрос вообще ко мне??! это ваш запрос, вам лучше знать, что вы хотите получить в результате - а добавление группировки изменит этот самый результат.Вы же сами написали что у меня в новом запросе нет группировок. Я спрашиваю, о каких группировках идет речь?

tanglirЕсли у вас 15 записей, то никакие индексы не нужны вообще. Серверу проще прочитать обе таблицы целиком.Зачем тогда он использует индексы в http://pavel.cc/photo/screenshot(16).jpg ? Наверное ему не важно сколько записей, он делает один и тот же план для любого количества. И если получится сделать хороший запрос для 4 записей, то он будет таким же для 150000 записей.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489889
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_Pavelо каких группировках идет речь?О тех, что были в предыдущих запросах. Но если речь уже не о них, то проехали.

D_PavelЗачем тогда он использует индексы в http://pavel.cc/photo/screenshot(16).jpg ?Потому что в первом запросе есть фильтр по первичному ключу. Выбираются всего 2 записи (из 15?). Хотя учитывая, что там всего 15 записей, я, честно говоря, не понимаю, почему оптимизатор решил там использовать индекс, быстрее было бы вычитать всю таблицу целиком.
А во втором фильтра нет, есть только связь. Так вот оптимизатор посчитал, что выгодней целиком прочитать topics и к ней прицепить записи из messages, используя индекс по messages.parent. Только используется он, повторюсь, не для фильтрации, а для соединения. У вас запросы абсолютно разные вещи делают, а вы хотите сравнивать использование индексов...

D_Pavelне важно сколько записей, он делает один и тот же план для любого количества. И если получится сделать хороший запрос для 4 записей, то он будет таким же для 150000 записей.Совсем необязательно.
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38489957
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как тогда сделать вместо соединения фильтрацию? Например если из одной таблицы выбрались две записи, то сделать фильтрацию по этим двум записям во второй таблице по ключу, чтобы выбралось тоже две записи, а не читалась вся таблица?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38490033
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelКак тогда сделать вместо соединения фильтрацию?пц
товарищи, я пас
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38490079
D_Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть кто-нибудь другой кто знает как это сделать?
...
Рейтинг: 0 / 0
Помогите исправить простой запрос
    #38491385
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_PavelНаверное ему не важно сколько записей, он делает один и тот же план для любого количества. И если получится сделать хороший запрос для 4 записей, то он будет таким же для 150000 записей. Почитайте Когда создавать индексы , Определяем порядок столбцов в составном индексе
...
Рейтинг: 0 / 0
25 сообщений из 56, страница 2 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите исправить простой запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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