我有两张这样的表:
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
哪一个最适合用于高负载/流量站点?性能最佳?
由于
答案 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