【发布时间】:2019-08-12 21:27:34
【问题描述】:
我在Ubuntu 18.04. 上使用mysql-workbench 6.3
我创建了三个表,如下所示:
CREATE TABLE `prefix_random` (
`domain` varchar(500) NOT NULL,
PRIMARY KEY (`domain`),
UNIQUE KEY `domain_UNIQUE` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
注意:还有额外的 32 个字段,但我不查询它们,为简洁起见省略。
例子:
domain
-----------------
sub.example.net
第二张桌子:
CREATE TABLE `noprefix_random` (
`domain` varchar(500) NOT NULL,
PRIMARY KEY (`domain`),
UNIQUE KEY `domain_UNIQUE` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
注意:还有额外的 32 个字段,但我不查询它们,为简洁起见省略。
例子:
domain
----------------------
example.net
第三张表:
CREATE TABLE `new_random` (
`new_domain` varchar(500) NOT NULL,
PRIMARY KEY (`new_domain`),
UNIQUE KEY `new_domain_UNIQUE` (`new_domain`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
注意:还有额外的 3 个字段,但我没有查询它们,为简洁起见省略。
例子:
new_domain
------------------------
http://sub.example.com
我要查询三个表中的共享名example.com,如下:
查询:
SELECT `new_random`.`new_domain`,`prefix_random`.`domain`,`noprefix_random`.`domain`
FROM `myscheme`.`new_random`
JOIN `myscheme`.`prefix_random`
# the substring to extract the part: sub.example.com
ON substring_index(`new_random`.`new_domain`,'http://',-1) = `prefix_random`.`domain`
JOIN `myscheme`.`noprefix_random`
# by adding sub, it becomes: sub.example
ON CONCAT('sub.',`noprefix_random`.`domain`) = `new_domain`,`prefix_random`;
预期的输出是:
http://sub.example.com, sub.example.com, example.com
查询永远持续。如果我使用 L
将输出限制为少量LIMIT 10;
我得到了结果。记录数不会太大。 prefix_random 包含 620062、noprefix_random 包含 62294 和 588380 条记录。
有什么问题?你能帮我运行查询吗?
【问题讨论】:
-
注意,主键是 a) 键和 b) 总是唯一的。不需要在其上使用辅助键。
-
我的每个表都有一个主键。你想指出什么?对不起,我没有明白你的意思。
-
您不需要 xxx_UNIQUE 键,因为同一个字段是主键。
-
@danblack 这没有害处。有什么问题?
标签: mysql database relational-database mysql-workbench database-performance