Очень грузит БД запрос.

Статус
В этой теме нельзя размещать новые ответы.

linpc

Гуру форума
Регистрация
6 Апр 2012
Сообщения
178
Реакции
55
Очень сильно грузит БД данный запрос:
PHP:
$mass=mysql_fetch_assoc(mysql_query(
"SELECT Sum(`items`.`massa`) AS `mass` ,`invent`.`pl_id` 
FROM `items` 
INNER JOIN `invent` ON `items`.`id` = `invent`.`protype` 
GROUP BY `invent`.`pl_id` 
HAVING `pl_id`='".$pl['id']."';"));
Как можно уменьшить ее?
 
Последнее редактирование модератором:
Очень сильно грузит БД данный запрос:
$mass=mysql_fetch_assoc(mysql_query("SELECT Sum(`items`.`massa`) AS `mass` ,`invent`.`pl_id` FROM `items` INNER JOIN `invent` ON `items`.`id` = `invent`.`protype` GROUP BY `invent`.`pl_id` HAVING `pl_id`='".$pl['id']."';"));
Как можно уменьшить ее?
Для начала...
Какая бд. тип. Mysql?
Какое ПО.
Какое Железо.
Кусок таблицы 5-10 строк.
Какие индексы?
Только так можно вам помочь...
 
Для начала...
Какая бд. тип. Mysql?
Какое ПО.
Какое Железо.
Кусок таблицы 5-10 строк.
Какие индексы?
Только так можно вам помочь...

MYSQL
Стоит на хостинге. железо и ПО не знаю

Структуру добавил
 

Вложения

  • tfg.rar
    1,1 KB · Просмотры: 6
Сдаётся мне запрос имеет излишние сущности, попробуй упростить до:
PHP:
SELECT Sum(`items`.`massa`) AS `mass` ,`invent`.`pl_id` 
FROM `items` 
INNER JOIN `invent` ON `items`.`id` = `invent`.`protype`
WHERE `pl_id`='1' #тут свою переменную


Можно попробовать индекс на pl_id и на protype (через explain смотри работают они или нет)
PHP:
ALTER TABLE `invent` ADD INDEX `pl_id` (`pl_id`) ;
ALTER TABLE `invent` ADD INDEX `protype` (`protype`) ;


А еще у тебя логическая ошибка:
`items`.`id` - bigint
`invent`.`protype` - int
по логике они должны быть одинаковой длинны - либо bigint, либо int
 
Сдаётся мне запрос имеет излишние сущности, попробуй упростить до:
PHP:
SELECT Sum(`items`.`massa`) AS `mass` ,`invent`.`pl_id`
FROM `items`
INNER JOIN `invent` ON `items`.`id` = `invent`.`protype`
WHERE `pl_id`='1' #тут свою переменную


Можно попробовать индекс на pl_id и на protype (через explain смотри работают они или нет)
PHP:
ALTER TABLE `invent` ADD INDEX `pl_id` (`pl_id`) ;
ALTER TABLE `invent` ADD INDEX `protype` (`protype`) ;


А еще у тебя логическая ошибка:
`items`.`id` - bigint
`invent`.`protype` - int
по логике они должны быть одинаковой длинны - либо bigint, либо int
Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся `invent` ADD INDEX `pl_id` (`pl_id`) ;# Затронуто 1136 строк. Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся `invent` ADD INDEX `protype` (`protype`) ;# Затронуто 1136 строк.
 
Используйте хранимые процедуры и "пинайте" этот запрос кроном, чтобы при надобности данные брались из кеша, как уже готовые.
 
Используйте хранимые процедуры и "пинайте" этот запрос кроном, чтобы при надобности данные брались из кеша, как уже готовые.
Люди постоянно берут что то. И массу надо считать
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху