gpt4 book ai didi

c# - MySQL预处理器优化

转载 作者:可可西里 更新时间:2023-11-01 08:11:00 26 4
gpt4 key购买 nike

有人知道 MySQL 在启动查询之前是否涉及任何预处理器优化吗?

考虑以下查询:

string query = "SELECT giveaway_id FROM giveaways WHERE status >= @minStatus AND status <= @maxStatus AND type >= @minType AND type <= @maxType";

如果@minStatus@maxStatus是平等的,以及@minType@maxType ,我们可以用更优化的形式编写上面的查询:

string query = "SELECT giveaway_id FROM giveaways WHERE status = @minStatus AND type = @minType";

我想知道 MySQL 是否足够聪明,可以超越自身,或者我应该帮助它编写适当的优化语句,然后再在我的 C# 应用程序中启动它们。

谢谢。

最佳答案

这取决于您拥有的索引。 INDEX(status), INDEX(type) 没什么用。 INDEX(status, type)(或相反的顺序)可能工作良好。

这取决于您使用的版本。较新的版本使用“索引条件下推”,在这种情况下可能更智能。

旧版本可能会看到不平等并决定它是一个“范围”。然后它会说“2 个范围,所以我不能同时使用 INDEX(status, type)”的两个部分。

EXPLAIN FORMAT=JSON SELECT ...(5.6 或更高版本)将为您提供一些关于正在发生的事情的线索。

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

(在任何版本中)会给你一个更有力的线索。如果 Handler_read_next 的值大约等于返回的行数,那么它正在尽可能高效地运行。

另一个可能的问题...@变量并不总是像文字一样工作,因此也可以使用文字值进行测试。

关于c# - MySQL预处理器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961870/

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