mysql where连接_MySQL连接的性能结合where子句

我目前有这个查询:

SELECT

location.street,

location.zip,

location.city,

surface,

price_buy,

price_rental

FROM buildings

JOIN location

ON building.location_id = location.location_id

WHERE surface > 1000

期望的行为(就性能而言)将是:

>过滤掉表面>的建筑物的所有结果; 1000

>检索与剩余建筑物条目对应的位置数据.

我的查询目前正在这样做吗?从语法上来说,我希望WHERE需要在JOIN之前,但这是否可能? MySQL本身是否会进行任何优化,如果是这样,那么所有SQL语言的优化是否相同?

解决方法:

首先,您的查询与您想要的相反 – 它过滤掉(即移除)表面<= 1000的建筑物.

Syntactically I would expect that the WHERE would need to be before

the JOIN, but is this even possible?

不,你的语法很好.连接首先出现的原因是它们识别要查询的表和关系;只有在完成后才能指定您执行和不需要的行.

SQL语法的形式允许查询优化器理解你的意思(只要你

Does MySQL itself does any optimisation, if so, does that same

optimisation hold for all SQL languages?

是的,MySQL(以及几乎所有的SQL数据库引擎)都包含一个查询优化器,它将您的SQL转换为特定的指令.从理论上讲,SQL是一种declarative语言 – 你告诉计算机你想要实现什么,它应该能够找到最有效的方法 – 这与命令式编程(PHP,C,Ruby等)形成鲜明对比.你明确告诉计算机该做什么,以及以何种顺序.

您可以通过EXPLAIN获得最佳效果.

从性能的角度来看,连接的顺序和where子句不应该有所不同(尽管我已经看到了一些并不总是如此的数据库);但是,表格的索引策略会产生巨大影响.坏消息是,这确实在数据库引擎之间有所不同.

标签:performance,sql,mysql

来源: https://codeday.me/bug/20190825/1719571.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值