首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >优化Mysql JOIN查询速度

优化Mysql JOIN查询速度
EN

Stack Overflow用户
提问于 2019-04-09 16:56:33
回答 2查看 27关注 0票数 0

我有两个表,称为T1,由1.6mln行组成,T2由4.6mln行组成,具有一对多关系。

T1的CREATE STMT为:

代码语言:javascript
复制
CREATE TABLE `T1` (
  `field_1` text,
  `field_2` text,
  `field_3` decimal(10,6) DEFAULT NULL,
  `field_4` decimal(10,6) DEFAULT NULL,
  `field_4` decimal(10,6) DEFAULT NULL,
  `field_5` text,
  `field_6` text,
  `field_7` text,
  `field_8` double DEFAULT NULL,
  `field_9` text,
  `field_10` text,
  `field_11` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

T2的CREATE STMT为:

代码语言:javascript
复制
CREATE TABLE `T2` (
  `field_1` int(11) DEFAULT NULL,
  `field_2` text,
  `field_3` text,
  `field_4` text,
  `field_5` text,
  `field_6` text,
  `field_7` text,
  `field_8` text,
  `field_9` text,
  `field_10` text,
  `field_11` text,
  `field_12` text,
  `field_13` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

目前,我还没有设置、任何类型的索引或任何特定的约束,但是T1.field_1应该是我理想的键,并且可以与T2.field_2字段连接。

如果我决定进行如下连接:

代码语言:javascript
复制
SELECT * FROM T1
JOIN T2
ON T1.field_1=T2.field_2
WHERE T1.=2130100;

基准真的很高。下面是解释:

所以我只是在试着理解一些可能的改进:

添加一些索引来更改输入fields?

  • Maybe的类型添加主键?
EN

回答 2

Stack Overflow用户

发布于 2019-04-09 17:57:10

在where条件下,您错过了列名,我假设这些列名为your_col

从mysql 5.0.3开始,varchar可以达到65,535,因此如果可能,您可以尝试使用varchar而不是text

对于索引,索引的大小有限制,最大键长度为767字节(假设每个utf8字符为3字节)。因此大约250个utf8字符)

索引候选列必须遵守这些限制如果这是可能的,那么可以将索引添加到

表t2列fiedl_2

等等

代码语言:javascript
复制
table t1 a composite index on  column (Your_col, field_1) 

这些是where和ON子句中涉及的列

代码语言:javascript
复制
  SELECT * FROM T1
  JOIN T2
  ON T1.field_1=T2.field_2
  WHERE T1.Your_col=2130100;
票数 2
EN

Stack Overflow用户

发布于 2019-04-23 03:35:54

由于您使用的是latin1,因此请将t1.field_1t2.field_2切换为不超过767的VARCHAR。使用不太可能超过的最短的值。对所有其他TEXT列执行同样的操作。(如果您需要>767,请坚持使用TEXT。)

然后添加两个索引:

代码语言:javascript
复制
T1:  INDEX(??) -- whatever column you are using in the `WHERE`
T2:  INDEX(field_2)

如果T1中的列是INT,那么2130100就是OK。但如果它是TEXT (或即将成为VARCHAR(..) ),那么引用它:"2130100"。应该防止对T1进行令人惊讶和不必要的表扫描。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55588817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档