首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL前处理器优化

问MySQL前处理器优化
EN

Stack Overflow用户
提问于 2015-11-27 16:56:21
回答 2查看 511关注 0票数 3

在启动查询之前,有人知道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#应用程序中启动它们之前,帮助它编写适当的优化语句。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-27 17:02:41

这太长了,不能发表评论。

您所指的步骤不是“预处理”,而是“编译和优化”。而且,是的,MySQL确实进行了各种优化,这里描述了这一点。

但是,问题的含义是,一个等式比较=比两个不等式要快得多。一般情况并非如此。更大的问题是,在status和type上是否有索引可用。索引的使用将是性能的主要因素--多个不等式可能会阻止MySQL找到最佳的索引。

我的建议是为查询创建正确的索引。然后编写查询,以确保它们利用了索引。

票数 1
EN

Stack Overflow用户

发布于 2015-11-27 21:19:19

这取决于你的索引。INDEX(status), INDEX(type)是很没用的。INDEX(status, type) (或相反的顺序)可能运行良好。

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

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

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

代码语言:javascript
复制
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33961870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档