【发布时间】:2019-08-30 12:16:15
【问题描述】:
我有 2 个表,名为 T1 由 160 万行组成,T2 由 460 万行组成,具有一对多关系。
T1 的 CREATE STMT 是:
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 是:
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 字段连接。
如果我决定像这样进行 JOIN:
SELECT * FROM T1
JOIN T2
ON T1.field_1=T2.field_2
WHERE T1.=2130100;
所以我只是想了解可能有哪些改进:
- 添加一些索引
- 更改输入字段的类型?
- 可以添加主键吗?
【问题讨论】:
-
按列类型比较表
TEXT是个坏主意。 -
历史上 VARCHAR 比 TEXT 快。
-
是的 - 全部。
-
@JoopEggen - 在某些情况下,varchar 和 text 具有相同的性能;在某些情况下,
TEXT会明显变慢(涉及额外的磁盘命中)。
标签: mysql database join indexing query-performance