gpt4 book ai didi

mysql - 如何优化具有多个不等式的mysql查询?

转载 作者:行者123 更新时间:2023-11-29 21:43:20 27 4
gpt4 key购买 nike

我有数百个网站查询,如下所示:

SELECT blah, blah, blah FROM sometable
WHERE '2015-12-15 18:55:20' BETWEEN date_from AND date_to
AND date_from > '2015-06-26 10:40:08'
and ctcx_latitude >= 41.87403474 and ctcx_latitude <= 41.93293328
and ctcx_longitude >= -87.64343262 and ctcx_longitude <= -87.61356354
and (LP_LIST_PRICE BETWEEN 90000 and 250000) and BTH_BATHS >= 1.0 and BR_BEDROOMS >= 1
and ASM_ASSESMENT_ASSOCIATION_DUES <= 500
order by LP_LIST_PRICE

注意每个条件都是不等式。

MYSQL 完全无法为此查询使用任何索引。我已经尝试了许多可能的组合,但归根结底是,mysql 优化器似乎没有正确识别不等式。这是 Amazon RDS 上的 mysql5.6(支持最新版本)。

目前,我可以通过增加服务器内存来匹配表大小来解决这个问题,但这已经比必要的成本贵了 4 倍,而且只会变得更糟。

这种查询在mysql中可以很好地运行(有效地使用索引)吗?

最佳答案

and ASM_ASSESMENT_ASSOCIATION_DUES <= 500

警告 - 如果该列可以为 NULL,则可能会弄乱 WHERE。建议您默认为0,而不是NULL

您的问题很棘手,但没有好的答案。某些列(例如,BTH_BATHS)不值得建立索引。许多其他人有时可能是有选择性的。如果它们有单列索引,优化器将尝试选择其中最好的。 (有时会搞砸,因为统计数据相当简单。)

您的示例似乎有一个相当窄的纬度/经度边界框。如果这是最佳约束,并且您有很多行,那么您可以考虑 http://mysql.rjweb.org/doc.php/latlng 中的代码。 .

'2015-12-15 18:55:20' BETWEEN date_from AND date_to -- 也许大多数行都在date_from之前?它们使表格变得困惑,从而减慢了您的优化尝试?如果是这样,可能值得将这些行移出表。

关于mysql - 如何优化具有多个不等式的mysql查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303502/

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