powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать оптимизацию запроса?
13 сообщений из 13, страница 1 из 1
Как сделать оптимизацию запроса?
    #38766312
tegs89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Есть следующий запрос к БД который делает выборку заказов магазина:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
$sql_ord="SELECT DISTINCT orders.id, orders.user_id,orders.area,orders.address, orders.user_name, orders.email, orders.phone, orders.address,DATE_FORMAT(orders.time_order, '%d:%m:%Y %H:%i') AS time_order , orders.delivery_id, orders.payment_id, orders.payment_id,orders.user_preffered_date,orders.user_preffered_time,orders.user_name,orders.delivery_id,orders.payment_id,orders.total_cost
                                        FROM orders, rule_group, rul_areas
                                        WHERE rule_group.id_units='$otde'
                                        AND rule_group.id_group=orders.us_g
                                        AND rul_areas.id_agency='$agen'
                                        AND rul_areas.id_area=orders.area ".$filter."
                                        OR orders.user_id ='0' ".$filter."
					AND orders.us_g='0' ".$filter." 



Запрос выполняется очень медленно - около 40 секунд. Методом тыка определил что это изза 2 последних строчек(это заказы незарегистрированых пользователей):

Код: php
1.
2.
 OR orders.user_id ='0' ".$filter."
AND orders.us_g='0' ".$filter



Как оптимизировать, ускорить время обработки?
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766335
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89,


1. по любому почитайте и используйте EXPLAIN
для таких разборок

2. когда идет смесь AND OR -- полезно использовать
скобки для ясности.

3. Часто (не всегда) запросы с OR лучше переписывать
на два отдельных запроса и потом делать UNION ALL.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766349
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89
Код: php
1.
".$filter."

Это что за таинственный фильтр?
Выведите содержимое переменной $sql_ord непосредственно перед выполнением запроса и покажите нам.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766512
tegs89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbctegs89,


1. по любому почитайте и используйте EXPLAIN
для таких разборок

2. когда идет смесь AND OR -- полезно использовать
скобки для ясности.

3. Часто (не всегда) запросы с OR лучше переписывать
на два отдельных запроса и потом делать UNION ALL.

Спасибо. Не подскажите хороший сайт с документацией?


javajdbcЭто что за таинственный фильтр?
Выведите содержимое переменной $sql_ord непосредственно перед выполнением запроса и покажите нам.

$filter - переменная добавления поиска для фильтра(если исп.фильтр):

Код: php
1.
2.
3.
4.
5.
    if (isset($_GET['id_order']) && $_GET['id_order']!=''){// вибір за кодом товару
		$filter= " AND orders.id LIKE '%".$_GET['id_order']."%'";
        $name_filter='поиск по номеру заказа "'.$_GET['id_order'].'"';
        
	}



Что вы имеете ввиду вывести $sql_ord перед выполнением? Не совсем понял.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766514
tegs89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати пробовал ALTER TABLE order ADD INDEX(user_id, us_g).
Лучше не стало. Интересно, почему?
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766516
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89Не подскажите хороший сайт с документацией?Лучше оригинальной документации еще ничего не придумали.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766518
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89Что вы имеете ввиду вывести $sql_ord перед выполнением? Не совсем понял.Именно это и имею в виду. Вывести содержимое переменной $sql_ord куда угодно - на страницу, в файл и т.п. А потом скопировать сюда.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766519
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89$filter - переменная добавления поиска для фильтра(если исп.фильтр):А зачем его три раза в запрос совать?
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766529
tegs89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksofttegs89Что вы имеете ввиду вывести $sql_ord перед выполнением? Не совсем понял.Именно это и имею в виду. Вывести содержимое переменной $sql_ord куда угодно - на страницу, в файл и т.п. А потом скопировать сюда.

Вы имеет ввиду через var_dump() скопировать что оно выводит?

[quot miksoft]tegs89А зачем его три раза в запрос совать?


Вы правы, хватило бы и 2. Но смысл оно смысл не меняет, пробовал. Из за посдених 2 строк
Код: php
1.
2.
 OR orders.user_id ='0' ".$filter."
AND orders.us_g='0' ".$filter

грузит около 40 секунд
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766533
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89Вы имеет ввиду через var_dump() скопировать что оно выводит?Ну можно и так. Но, наверное, хватило бы и простого echo.
tegs89Вы правы, хватило бы и 2.А почему 2?
Хватило бы и одного.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766569
tegs89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
var_dump($sql_ord) :

string(849) "SELECT DISTINCT orders.id, orders.user_id,orders.area,orders.address, orders.user_name, orders.email, orders.phone, orders.address,DATE_FORMAT(orders.time_order, '%d:%m:%Y %H:%i') AS time_order , orders.delivery_id, orders.payment_id, orders.payment_id,orders.user_preffered_date,orders.user_preffered_time,orders.user_name,orders.delivery_id,orders.payment_id,orders.total_cost FROM orders, rule_group, rul_areas WHERE rule_group.id_units='4' AND rule_group.id_group=orders.us_g AND rul_areas.id_agency='3' AND rul_areas.id_area=orders.area OR orders.user_id ='0' AND orders.us_g='0' "
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766582
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
SELECT DISTINCT
  orders.id,
  orders.user_id,
  orders.area,
  orders.address,
  orders.user_name,
  orders.email,
  orders.phone,
  orders.address,
  DATE_FORMAT(orders.time_order, '%d:%m:%Y %H:%i') AS time_order,
  orders.delivery_id,
  orders.payment_id,
  orders.payment_id,
  orders.user_preffered_date,
  orders.user_preffered_time,
  orders.user_name,
  orders.delivery_id,
  orders.payment_id,
  orders.total_cost
FROM orders, rule_group, rul_areas
WHERE (rule_group.id_units='4'
  AND rule_group.id_group=orders.us_g
  AND rul_areas.id_agency='3'
  AND rul_areas.id_area=orders.area)
  OR (orders.user_id ='0'
  AND orders.us_g='0')

Оформил в тэг, отформатировал и расставил скобки. Теперь можно хоть что-то увидеть.
...
Рейтинг: 0 / 0
Как сделать оптимизацию запроса?
    #38766585
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tegs89,

А теперь проверьте, соответствуют ли скобки вашему пониманию того, что делает запрос.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать оптимизацию запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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