[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Неверно составленный запрос
Kusss
	SELECT 
h.id AS rcp_history_id, h.ts_s, h.ts_e,
DATE_FORMAT(h.ts_s, '%d.%m.%Y %H:%i') AS date_start,
DATE_FORMAT(h.ts_e, '%d.%m.%Y %H:%i') AS date_finish,
IF (h.ts_e IS NOT NULL, UNIX_TIMESTAMP(h.ts_e) - UNIX_TIMESTAMP(h.ts_s), NULL) AS time_work,
r.name, r.id,
(

SELECT
TC
FROM
`monitor`
WHERE
id_panel = h.id_panel AND
ts BETWEEN h.ts_s AND h.ts_e + INTERVAL 15 SECOND
ORDER BY
id
LIMIT
1
) AS tc_start,
(

SELECT
TC
FROM
`monitor`
WHERE
id_panel = h.id_panel AND
ts BETWEEN h.ts_s AND h.ts_e + INTERVAL 15 SECOND
ORDER BY
id DESC
LIMIT

1
) AS tc_end
FROM
`rcp_history` AS h
INNER JOIN
`rcp` AS r ON r.id = h.id_rcp
WHERE
h.id_panel = $id AND
h.ts_s BETWEEN '$g_start' AND '$g_end_sql'
ORDER BY
h.ts_s DESC

Есть вот такой рабочий запрос, но выполняется слишком долго.
Медленно выполняется последняя часть, выборка по диапазону дат. Около 3 секунд на выборку в 59 строк.
Смысл получить первое и последнее значение.

В таблице `monitor` не так и много записей (55742 для нужного id)
-- Структура таблицы `monitor`

DROP TABLE IF EXISTS `monitor`;
CREATE TABLE `monitor` (
`id` int(1) NOT NULL,
`id_panel` smallint(5) UNSIGNED NOT NULL,
`ts` datetime NOT NULL,
`TC` decimal(3,1) DEFAULT NULL,
`TP` decimal(3,1) DEFAULT NULL,
`TI1` decimal(3,1) DEFAULT NULL,
`TI2` decimal(3,1) DEFAULT NULL,
`TC2` decimal(3,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;

-- Индексы таблицы `monitor`

ALTER TABLE `monitor`
ADD PRIMARY KEY (`id`),
ADD KEY `id_panel` (`id_panel`),
ADD KEY `ts` (`ts`);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.