Я использую mysql-workbench
и mysql
сервер на ubunt 18
машине с 16 ГБ ОЗУ.
У меня есть схема с именем ips
и две таблицы, скажем: table1
и table2
.В table1
и table2
есть два поля: ip
и description
, биты имеют тип string.У меня много записей.table1
имеет 779938 записей, а table2
имеет 136657 записей.
Мне нужно сделать совместный запрос, чтобы найти число ip
s в table2
, которое имеет description
, начинается с str1%
и не содержит str2
и не содержит str3
.В то же время эти ip
s имеют описание в table1
, которое не начинается с str1%
и содержит либо str2
, либо str3
.
Это мой запрос:
SELECT COUNT(`table2`.`ip`)
FROM `ips`.`table2`, `ips`.`table1`
WHERE `table2`.`ip` = `table1`.`ip`
AND (LOWER(`table1`.`description`) NOT LIKE 'str1%'
AND (LOWER(`tabl1`.`description`) LIKE '%-str2-%'
OR LOWER(`table1`.`description`) LIKE '%-str3-%'
)
)
AND (LOWER(`table2`.`description`) LIKE 'str1%'
AND LOWER(`table2`.`description`) NOT LIKE '%-str2-%'
AND LOWER(`table2`.`description`) NOT LIKE '%-str3-%'
);
Однако запрос никогда не заканчивается.Продолжительность ?
, и я никогда не получаю результат.Можете ли вы помочь?
РЕДАКТИРОВАТЬ:
Вот ШОУ СОЗДАТЬ ШОУ и
1) SHOW CREATE TABLE
ips .
table2 ;
CREATE TABLE `table2` (
`ip` varchar(500) DEFAULT NULL,
`description` varchar(500) DEFAULT NULL,
`type` varchar(500) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
2) SHOW CREATE TABLE
ips .
table1 ;
CREATE TABLE `table1` (
`ip` varchar(500) DEFAULT NULL,
`description` varchar(500) DEFAULT NULL,
`type` varchar(500) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
3) EXPLAIN <query>
# id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
1, SIMPLE, table2, , ALL, , , , , 136109, 100.00, Using where
1, SIMPLE, table1, , ALL, , , , , 786072, 10.00, Using where; Using join buffer (Block Nested Loop)
РЕДАКТ. 2:
Данные для поля ip
являются строками в этом формате: str.str.str.str
Поле decription
имеет следующий формат: str1-str2-str3-str4