当前位置: 首页 > 面试题库 >

MySQL IN子句中的多列

年业
2023-03-14
问题内容

我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是:

  • 00
  • 00
  • x1
  • 11

我有这四个列的索引,其顺序为x0,y0,x1,y1。

我列出了大约一百种地理对组合。我将如何有效地查询此数据?

我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL:

SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));

我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助!

笔记:

  • 我无法更改数据库的架构
  • 我有大约100‘000‘000行

编辑: 原样的代码实际上正在工作,但是它非常慢并且没有利用索引(因为我们有MySQL的旧版本v5.6.27)。


问题答案:

为了有效利用索引,您可以重写IN谓词

(x0, y0, x1, y1) IN ((4, 3, 5, 6),(9, 3, 2, 1))

像这样:

(  ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) 
OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 )
)


 类似资料:
  • 我是QueryDSL的新手,能够在WHERE-in子句中组装具有多个列的查询,如下所示: 我有主要查询的部分: 但我不知道如何实现where子句。如何在QueryDSL中实现这一点? 提前致谢!

  • 问题内容: 我正在尝试获取id = 3或id = 9或id = 100的内容…请记住,我可以拥有几百个这些ID。 编写查询的最有效方法是什么? 问题答案:

  • 问题内容: 我想修改当前为空的数据框列(Age)的单元格值,并且仅当另一列(Survived)的对应行的值为0(年龄为空)时才这样做。如果在“存活”列中为1,但在“年龄”列中为空白,那么我将其保留为null。 我尝试使用运算符,但没有用。这是我的代码: 有什么建议如何处理吗?谢谢。 错误信息: 问题答案: 由于Python没有运算符,因此会出现错误异常。它具有,而后者是在上面创建布尔表达式的正确选

  • 下面是我开始使用的代码,但我不确定该去哪里。看看这个问题的解决方案,我似乎需要根据下面的查询下载数据,然后在客户端对其进行排序。我似乎做不到的事

  • 我需要确定一个实体是否已经被持久化。不幸的是,我没有这个id,但是如果实体的其他六个字段的值与一个持久化的实体相匹配,我可以确定实体已经持久化了。我正在使用Spring JPA存储库,并且知道我可以执行以下操作: 有没有类似的方法:

  • 问题内容: 需要知道如何构造一个hibernate查询,该查询可获取与包含多个列值的子句匹配的结果。 例如, 这里将是一个二维数组,可以包含用于基本类型例如,基本包装对象,等等。 这可能吗? 问题答案: 在这里写下我如何实现此目标。基本上,我们需要从需要查询的列集中制作一个Hibernate组件(读取@Embeddable对象),并将其嵌入到主实体中。 列组可以如下组合: 将上述内容嵌入到您的主要