哪个MySQL查询最适合从两个表中获取数据

时间:2014-03-16 06:43:59

标签: mysql query-optimization myisam

我有两张这样的表:

mysql> desc table1;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | NO   |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> desc table2;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   |     | NULL    |       |
| name  | varchar(255) | NO   |     | NULL    |       |
| age   | int(11)      | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

两个表中的ID字段对应各自的数据相同。

数据库引擎:MYISAM

我想从两个表中获取数据,并且我一直在尝试各种查询。

以下所有查询都运行良好,但我想知道最佳查询,根据性能明智,表包含2000万条记录。

查询1

SELECT t2.age, t1.name
FROM table2 t2
LEFT JOIN table1 t1 ON t2.id = t1.id
WHERE t1.id =1
AND t2.id =1

查询2

SELECT table1.name, age
FROM table1, table2
WHERE table1.id =1
AND table2.id =1

查询3

SELECT  table1.name , table2.age 
FROM table1, table2 
WHERE table1.id = 1 
AND table2.id = 1

查询4

SELECT table1.name, table2.age
FROM table1
INNER JOIN table2 ON table1.id = table2.id
WHERE table1.id =1
AND table2.id =1

查询5

SELECT table1.name, age
FROM table1, table2
WHERE table1.id =1
AND table2.id =1

哪一个最适合用于高负载/流量站点?性能最佳?

由于

2 个答案:

答案 0 :(得分:0)

为了避免在table2上进行全表扫描,我建议你在" table2.id"上添加索引。字段,然后你可以执行"解释"并看看哪一个更好。

正如您所描述的,您的所有查询都将执行几乎相同的操作,但是如果不在table2上添加索引,则将读取该表上的所有记录。尝试一下,并与您当前的结果时间进行比较。

答案 1 :(得分:0)

如果您想从这两个表中获取数据,并且仅在id = 1时获取数据,则可以使用限制1而不是WHERE table1.id =1 AND table2.id =1

如果2个表格中存在相同的ID,您希望获取数据{/ 1}}您的表格

INNER JOIN

SELECT t2.age, t1.name
FROM table2 t2
INNER JOIN table1 t1 ON t2.id = t1.id
LIMIT 1