gpt4 book ai didi

mysql - 需要微调我在 varchar 列上有索引的 mysql 查询

转载 作者:行者123 更新时间:2023-11-29 05:38:28 25 4
gpt4 key购买 nike

我有一个表,其中有近 2,000,000 条记录。我有一个列(crmid),它是该表中的一个 varchar。我写了一个查询 说,

 Select column1, column2,..... from table where crmid = ?

值来自前端。以前它工作正常但现在它从前端超时。然后我在那个列上使用了一个索引,它甚至对我没有太大帮助。建立索引后,我解释了查询,同样它也在使用索引遍历 1,800,000 行

请帮助我微调此查询。

注意:这不是实际的查询,它只是最简单的形式。实际查询中有很多join。

编辑::完整的查询是

select  column1
, column2
from table1 a
inner join appointmentstatusmst st
on st.entity_id = a.shdstatuslviid
inner join hlcclientdetails
on a.shdclientid = hlcclientdetails.cldregno
and a.shdclientdcnid = hlcclientdetails.clddcnid
where hlcclientdetails.cldunifiedcrmid = ?

解释输出为

最佳答案

appointmentstatusmst.entityid 有索引吗? table1.shdclientidtable1.shdclientdcnid 怎么样? hlcclientdetails.cldregnohlcclientdetails.clddcnid 怎么样?

为了使连接顺利进行,您需要在连接条件中涉及的列以及用于选择输出行的列上建立索引。

@Bohemian 是正确的,这是一个中型的,不是很大的问题。

编辑。

考虑一下您的 mySQL 服务器实际上必须做什么来执行您的查询可能会有所帮助。

 where hlcclientdetails.cldunifiedcrmid = ? 

意味着它必须遍历您的 hlcclientdetails 表以查找某些行。因此,cldunifiedcrmid 上的索引将让它高效地执行此操作。您已经提到您已经制定了该索引。好。

继续前进,

   inner join hlcclientdetails 
on a.shdclientid = hlcclientdetails.cldregno
and a.shdclientdcnid = hlcclientdetails.clddcnid

意味着它必须获取在您的 hlcclientdetails 表中找到的行,并通过查看 a.shdclientdcnid 将它们与您的 table1 a 匹配和 a.shdclientid。因此,对于这两列,您的查询可能会受益于 table1 a 中的复合索引。您应该尝试添加该索引,看看性能是否会变得更好。

最后,

inner join appointmentstatusmst st 
on st.entity_id = a.shdstatuslviid

意味着服务器必须获取它在 table1 a 中找到的行并将它们匹配到第三个表。您在评论中提到 entity_id 是该表的主键。那会有所帮助。

我希望你明白了。索引不仅对 WHERE 子句有帮助,对 ON 子句也有帮助。

顺便说一句,另一个答案中提到的全文索引对您遇到的这个 JOIN 性能问题没有帮助。

关于mysql - 需要微调我在 varchar 列上有索引的 mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com