Mysql 加速两个数据库之间的连接
我有这个问题,需要40秒,有没有办法加快速度?多谢各位Mysql 加速两个数据库之间的连接,mysql,performance,left-join,Mysql,Performance,Left Join,我有这个问题,需要40秒,有没有办法加快速度?多谢各位 SELECT *, last.Date FROM constant.derogation der LEFT JOIN variable.last last ON der.code = last.code WHERE 1 = 1 AND status != 'removed' ORDER BY status; 这是两个表的结构,两个数据库位于同一服务器上。 我将只从最后一个表中获取一个值
SELECT *, last.Date
FROM constant.derogation der
LEFT JOIN variable.last last
ON der.code = last.code
WHERE 1 = 1
AND status != 'removed'
ORDER BY status;
这是两个表的结构,两个数据库位于同一服务器上。
我将只从最后一个表中获取一个值
DLL
| derogation | CREATE TABLE `derogation` (
`xxx` char(10) NOT NULL,
`xxx` varchar(100) DEFAULT NULL,
`code` char(17) DEFAULT NULL,
`xxx` varchar(20) DEFAULT NULL,
`xxx` char(6) DEFAULT NULL,
`xxx` varchar(50) DEFAULT NULL,
`xxx` varchar(200) DEFAULT NULL,
`xxxx` varchar(200) DEFAULT NULL,
`xxxx` varchar(100) DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxx` varchar(100) DEFAULT NULL,
`xxxx` varchar(20) DEFAULT NULL,
`xxx` varchar(50) DEFAULT NULL,
`xxx` varchar(10) DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`xxx` varchar(10) DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`status` varchar(20) DEFAULT NULL,
`xxx` varchar(1000) DEFAULT NULL,
KEY `code_index_derogation` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
| Last | CREATE TABLE `Last` (
`code` char(17) DEFAULT NULL,
`xxx` decimal(10,2) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxxx` text DEFAULT NULL,
`xxxxx` datetime DEFAULT NULL,
`xxxx` char(6) DEFAULT NULL,
KEY `idx_Last_Code` (`code`),
KEY `idx_Last_xxx` (`xxx`),
KEY `code_index` (`code`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX您可以使用临时表、临时表CTE或为表的列添加索引。 但使用临时表来加速SQL查询的执行总是一个很好的选择。(这个问题很微妙,在本论坛中经常被忽略。) 不要混淆排序规则。您正在加入
code
,但是字符集
和排序规则
在这两个表之间是不同的。建议使用'altertable。。转换为。。让他们保持一致
其他提示:
- 仅对真正固定长度的列使用
。否则使用CHAR
VARCHAR
- 在每个表上都有一个
主键
- 如果你真的希望加入,不要说“左加入”;这给读者增加了困惑
状态
列显示统计信息。请在每列前面加上表(或表别名),以确定其来源。这对您来说可能是显而易见的,但对我们来说不是。切勿使用SELECT*
。始终只命名(并限定)实际要返回的列。这两个表之间的关系是什么?是1:1还是1:n?@forpas奇怪的是,我认为状态属于最后一个,但情况并非如此。这是我的第一个选项,但速度较慢。我正在使用python查询表,所以我没有考虑使用这个选项,但我可能会使用它。非常感谢。因此,请在您的问题中添加Python作为标记。
| derogation | CREATE TABLE `derogation` (
`xxx` char(10) NOT NULL,
`xxx` varchar(100) DEFAULT NULL,
`code` char(17) DEFAULT NULL,
`xxx` varchar(20) DEFAULT NULL,
`xxx` char(6) DEFAULT NULL,
`xxx` varchar(50) DEFAULT NULL,
`xxx` varchar(200) DEFAULT NULL,
`xxxx` varchar(200) DEFAULT NULL,
`xxxx` varchar(100) DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxx` varchar(100) DEFAULT NULL,
`xxxx` varchar(20) DEFAULT NULL,
`xxx` varchar(50) DEFAULT NULL,
`xxx` varchar(10) DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`xxx` varchar(10) DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`xxx` datetime DEFAULT NULL,
`status` varchar(20) DEFAULT NULL,
`xxx` varchar(1000) DEFAULT NULL,
KEY `code_index_derogation` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
| Last | CREATE TABLE `Last` (
`code` char(17) DEFAULT NULL,
`xxx` decimal(10,2) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxxx` datetime DEFAULT NULL,
`xxxx` text DEFAULT NULL,
`xxxxx` datetime DEFAULT NULL,
`xxxx` char(6) DEFAULT NULL,
KEY `idx_Last_Code` (`code`),
KEY `idx_Last_xxx` (`xxx`),
KEY `code_index` (`code`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |