这句话是否已优化?
select d.id, d.wfid, d.docid , k.keyword, k.value from keywords k
inner join documents d
where k.document_id in (23,24) AND k.document_id = d.id;
我有一些ID来自POST
(23,24),我只需要获取它们的信息,所以为此我做了IN
。以下是硬编码用于测试目的。
我知道MySQL会解析句子并生成更优化的句子。有没有办法得到这句话,所以我一直避免让mysql优化它?
谢谢!
答案 0 :(得分:2)
在所有数据库引擎中,查询被解析为执行计划,该计划告诉引擎如何在给定表中给出索引,结构和数据的情况下有效地运行查询。完成一次后,引擎可以重用SAME查询的计划。
如果使用参数替换23,24,则即使参数值发生更改,引擎也会将所有查询视为相同。通常这是一件好事,但可能会导致问题。如果遇到问题,请在google上搜索参数嗅探。否则,只要存储计划,sql引擎就不会再多次优化查询一次(通常直到服务器重启或者由于不使用而导致计划被丢弃)。
答案 1 :(得分:2)
如果你运行这些,你会看到MySQL重写如何处理它们。 请注意,show warnings中的SQL并不总是有效的SQL语法
explain extended select d.id, d.wfid, d.docid , k.keyword, k.value from keywords k
inner join documents d
where k.document_id in (23,24) AND k.document_id = d.id;
show warnings;
答案 2 :(得分:1)
你错过了ON条款,它应该是那样的
select d.id, d.wfid, d.docid , k.keyword, k.value from keywords k
inner join documents d ON k.document_id = d.id
where k.document_id in (23,24) ;