Оператор SQL для чтения> 1000 значений в базе данных MySQL - PullRequest
0 голосов
/ 15 ноября 2018

В настоящее время у меня есть оператор выбора SQL, который успешно выполняет следующее, где он дает мне статус за последние два дня:

SELECT c.host, from_unixtime(a.clock), a.value, b.name 
FROM
    zabbix.history_uint a, 
    zabbix.items b, 
    zabbix.hosts c, 
    zabbix.groups g, 
    zabbix.hosts_groups hg 
WHERE c.hostid = hg.hostid 
AND g.groupid = hg.groupid 
AND b.itemid=a.itemid 
AND b.hostid=c.hostid 
AND (b.name = "nodeAlive") 
AND a.clock > 1539489622 
AND c.host = "LONDON01";

Вывод:

+------------+------------------------+-------+-----------+
| host       | from_unixtime(a.clock) | value | name      |
+------------+------------------------+-------+-----------+
| LONDON01   | 2018-11-13 00:15:35    |     1 | nodeAlive |
| LONDON01   | 2018-11-14 00:15:35    |     1 | nodeAlive |
| LONDON01   | 2018-11-13 00:15:35    |     1 | nodeAlive |
| LONDON01   | 2018-11-14 00:15:35    |     1 | nodeAlive |
| LONDON01   | 2018-11-13 00:15:35    |     1 | nodeAlive |
| LONDON01   | 2018-11-14 00:15:35    |     1 | nodeAlive |
+------------+------------------------+-------+-----------+

Я сейчаснужно найти состояние MADRID03, TORONTO52, NEWYORK77 и> 1000 других хостов.

Возможно ли выполнить это из текстового файла и вывести в другой файл?Если да, то как будет изменен синтаксис?

Спасибо и оцените его

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Разве это не так просто, как изменить

AND c.host = "LONDON01"

на

AND c.host IN ("LONDON01", "MADRID03", "TORONTO52", "NEWYORK77", "TORONT9999", ...)

Или, может быть, было бы проще поместить 1000+ имен в таблицу и сделать JOIN?Или у вас уже есть таблица?

Неужели вы перестали думать, сколько строк будет в выходном файле?

Вы можете (для простоты кодирования) изменить

a.clock > 1539489622

до

a.clock > NOW() - INTERVAL 2 DAY

(или используйте ... >= CURDATE() ..., если хотите начать в полночь)

Кажется, нет никаких оснований для JOIN до groups.

0 голосов
/ 15 ноября 2018

Вы можете прочитать список серверов во временной таблице и выполнить подзапрос.

CREATE TEMPORARY TABLE servers (name varchar(100)) ENGINE=MEMORY ;
LOAD DATA LOCAL INFILE '/path/to/your/server/listfile' INTO TABLE servers;
SELECT .....  AND c.host IN (SELECT name FROM servers);

Если список серверов меняется не часто, вы можете сделать таблицу постоянной и обновлять при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...