关于mysql中查询语句的优化
我有一个sql关于mysql中查询语句的优化,mysql,sql,Mysql,Sql,我有一个sql select p1.* from history p1, history p2 where p1.charge = p2.charge and p1.userkey = p2.userkey and p1.invitekey = p2.invitekey and p1.aid!=p2.aid 如果有大量数据,速度会很慢,那么我如何优化它呢?您可以向where子句中使用的列添加索引,这将提高性能。这取决于这些表上已经存在哪些索引
select p1.* from history p1, history p2
where p1.charge = p2.charge
and p1.userkey = p2.userkey
and p1.invitekey = p2.invitekey
and p1.aid!=p2.aid
如果有大量数据,速度会很慢,那么我如何优化它呢?您可以向where子句中使用的列添加索引,这将提高性能。这取决于这些表上已经存在哪些索引。
所以您应该检查一下,然后考虑是否应该添加一个额外的以避免全表扫描 但首先,最好使用语法。
它更具可读性,因为连接条件与搜索条件是分开的
select h1.*, h2.aid as h2_aid
from history h1
join history h2
on (h2.charge = h1.charge and h2.userkey = h1.userkey and h2.invitekey = h1.invitekey)
where h1.aid != h2.aid
但在您的情况下,您只能从p1中选择这些选项。因此,我假设可以使用
select *
from history h1
where exists
(
select *
from history h2
where h2.charge = h1.charge
and h2.userkey = h1.userkey
and h2.invitekey = h1.invitekey
and h2.aid != h1.aid
)
使用现代连接语法,然后向
ON
子句中的列添加索引,如果它们从中受益的话。请尝试正确使用连接。。。它会帮助你更好。。。根据您的表使用join…我尝试了join和exist,但仍然很慢,但仍然感谢您。@matt根据字段名,我有一种预感,userkey
上的非唯一索引可能会有所帮助。aid
上可能已经有一个索引,但由于的原因,它不会被使用=代码>。