powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Left join проблема...
39 сообщений из 39, показаны все 2 страниц
Left join проблема...
    #38788578
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay


На сайте подсчет отправленных смс, недавно их перевалило за 20 000 и теперь лефт джойн не работает. Как ограничить или исправить???

Код: sql
1.
SELECT count(*) FROM `{$tprefix}sms` JOIN `{$tprefix}clients` ON `{$tprefix}sms`.`client_login` = `{$tprefix}clients`.`client_login` WHERE `{$tprefix}clients`.`office_key` = '{$office_key}' {$filter_sms_q};



Выводит все смс клиентов принадлежащих к одному офису если без COUNT, а со счетчиком оно сначала показывает количество смс общее.

Подскажите пожалуйста как исправить sql запрос что бы он работал с этой большой таблицей...
...
Рейтинг: 0 / 0
Left join проблема...
    #38788960
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Up!
...
Рейтинг: 0 / 0
Left join проблема...
    #38789018
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdek,

Тебе для начала нужно привести сам текст запроса, тогда о чём-то можно будет разговаривать.
...
Рейтинг: 0 / 0
Left join проблема...
    #38789085
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivнужно привести сам текст запросадополню, а то тут частенько не понимают разницы: текст именно запроса (того, что исполняется на сервере), а не текст шаблона запроса, который тут приведён.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792670
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT count(*) FROM `{$tprefix}sms` JOIN `{$tprefix}clients` ON `{$tprefix}sms`.`client_login` = `{$tprefix}clients`.`client_login` WHERE `{$tprefix}clients`.`office_key` = '{$office_key}';



Вот же sql запрос, переменные в нем только префик и значение ключа офиса.... Они могут быть любыми
...
Рейтинг: 0 / 0
Left join проблема...
    #38792687
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirтекст именно запроса ( того, что исполняется на сервере ), а не текст шаблона запроса, который тут приведёндобавлю - и его explain
...
Рейтинг: 0 / 0
Left join проблема...
    #38792692
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего нет ключей, нет индексов, нужен explain
...
Рейтинг: 0 / 0
Left join проблема...
    #38792785
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SELECT * FROM `OTo_sms` JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a';

Так работает..

Не работает только если COUNT(*) подсчет ввести..
...
Рейтинг: 0 / 0
Left join проблема...
    #38792786
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче когда делаю подсчет то не работает, а когда просто вывожу на страницу то работает. Мне нужно делать подсчет для пагинатора. До 14000 записей все норм работало, перевалило за 20000 перестало работать.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792793
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть так
Код: sql
1.
2.
3.
4.
SELECT * 
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

работает, а так
Код: sql
1.
2.
3.
4.
SELECT count(*)
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

нет? чудеса. ну а если попробовать вот так
Код: sql
1.
2.
3.
4.
5.
SELECT count(*) FROM (
 SELECT 1 FROM `OTo_sms` 
 JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
 WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'
) t

?
...
Рейтинг: 0 / 0
Left join проблема...
    #38792919
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот видите работает без count (Лимит автоматом phpmyadmin добавил что бы все не отображать)


Так не работает



Так тоже не пашет
...
Рейтинг: 0 / 0
Left join проблема...
    #38792927
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdekТак тоже не пашетПотому что буковка "t" там была не просто так.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792940
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,


теперь говорит что дублируется имя столбца D:
...
Рейтинг: 0 / 0
Left join проблема...
    #38792948
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя ведь указаны таблицы перед столбцами....
...
Рейтинг: 0 / 0
Left join проблема...
    #38792958
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И если вместо звездочки пишу 1 как вы написали, то тоже не пашет.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792965
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdek,

А какой у вас сейчас MAX_JOIN_SIZE ?
...
Рейтинг: 0 / 0
Left join проблема...
    #38792970
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не знаю, на хостинге же. Я думал можно как то оптимизировать этот запрос. А то за 2 месяца 20000 через пол года еще менять придется его... :) Техподдержка мне не поможет.
Придется делать в php наверно, раз mysql не могёт... (Хотя while не справится наверно от такого массива ассоциативного)
Модератор: Пожалуйста, воздерживайтесь от употребления обсценной лексики. Пост поправлен.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792978
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdek,

Код: sql
1.
show variables like '%MAX_JOIN_SIZE%'

Что выдает?
...
Рейтинг: 0 / 0
Left join проблема...
    #38792989
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

Вот.
...
Рейтинг: 0 / 0
Left join проблема...
    #38792995
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как уже просил tanglir, покажите план запроса, который работает.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793001
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdek

Вот.Значения уменьшены относительно стандартных, но по, по идее, должны быть достаточны.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793003
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Чуть выше где три спойлера показан пример где без count работает, а с count нет.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793007
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdek,

explain <запрос который работает>
...
Рейтинг: 0 / 0
Left join проблема...
    #38793010
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Left join проблема...
    #38793015
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну не ключей ни индексов...
...
Рейтинг: 0 / 0
Left join проблема...
    #38793025
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как правильно, будьте добры.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793039
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у Вас что MyISAM, InnoDB?
...
Рейтинг: 0 / 0
Left join проблема...
    #38793044
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MySQL
...
Рейтинг: 0 / 0
Left join проблема...
    #38793267
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За такой план мне бы тоже запрос не понравился на месте сервера.
Создайте индексы по полю `OEo_clients`.`office_key` и по полю `OEo_sms`.`client_login`.

И кстати, почему у вас где-то `OEo_sms`, а где-то `OTo_sms` ? Если это разные таблицы, то индексы нужны для всех.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793645
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirто есть так
Код: sql
1.
2.
3.
4.
SELECT * 
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

работает, а так
Код: sql
1.
2.
3.
4.
SELECT count(*)
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

нет? чудеса. ну а если попробовать вот так


Так никаких чудес нет, в первом запросе результат выдаётся сразу, как только есть первые несколько сот строк.
И автор послания думает, что запрос работает быстро, поскольку до конца набора данных не долистывает .
А во втором случае запрос выдаст данные только когда посчитает все записи, удовлетворяющие всем условиям.
Это и в первом случае долго, только автор топика, видимо, это никогда не делает.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793654
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа сайте подсчет отправленных смс, недавно их перевалило за 20 000 и теперь лефт джойн не работает . Как ограничить или исправить???

SELECT count(*) FROM `{$tprefix}sms` JOIN `{$tprefix}clients` ON `{$tprefix}sms`.`client_login` = `{$tprefix}clients`.`client_login` WHERE `{$tprefix}clients`.`office_key` = '{$office_key}' {$filter_sms_q};


Выводит все смс клиентов принадлежащих к одному офису если без COUNT, а со счетчиком оно сначала показывает количество смс общее.

Подскажите пожалуйста как исправить sql запрос что бы он работал с этой большой таблицей...


tanglirто есть так
Код: sql
1.
2.
3.
4.
SELECT * 
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

работает, а так
Код: sql
1.
2.
3.
4.
SELECT count(*)
FROM `OTo_sms` 
JOIN `OTo_clients` ON `OTo_sms`.`client_login` = `OTo_clients`.`client_login` 
WHERE `OEo_clients`.`office_key` = '4e6fdeec6bf2c5724476ad6daec1036a'

нет? чудеса. ну а если попробовать вот так?



Что-то концы с концами у подсудимого несходятся...

Я ещё раз призываю подсудимого
Опубликовать проблемный запрос.

опубликовать DDL таблиц

Объяснить, в чём же заключается собственно проблема.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793835
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

это не разные просто я не сменил префикс. Не хотел вначале его палить.
...
Рейтинг: 0 / 0
Left join проблема...
    #38793982
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОбъяснить, в чём же заключается собственно проблема.Так еще вчера в MAX_JOIN_SIZE уперлись, см. 16783381
...
Рейтинг: 0 / 0
Left join проблема...
    #38793984
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdekmiksoft,

это не разные просто я не сменил префикс. Не хотел вначале его палить.Нам, честно говоря, все равно какой там префикс. Главное, чтобы вы сами не запутались.

Ну как, создание индексов помогло?
...
Рейтинг: 0 / 0
Left join проблема...
    #38794844
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как создавать их?
...
Рейтинг: 0 / 0
Left join проблема...
    #38795675
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdekКак создавать их?

create index ...
...
Рейтинг: 0 / 0
Left join проблема...
    #38796994
psfdek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А индексы создать 1 раз нужно или каждый раз в запросе нужно делать это?
И для каких столбцов мне нужно индексы сделать?
...
Рейтинг: 0 / 0
Left join проблема...
    #38797144
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Left join проблема...
    #38797243
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psfdekА индексы создать 1 раз нужно или каждый раз в запросе нужно делать это?Индексы создаются один раз и относятся к таблице, а не к запросу. А потом уже используются оптимизатором для выполнения тех запросов, где посчитает это полезным.

psfdekИ для каких столбцов мне нужно индексы сделать?miksoftСоздайте индексы по полю `OEo_clients`.`office_key` и по полю `OEo_sms`.`client_login`.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Left join проблема...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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