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

如何使用索引进行两列之间的查询过滤

陶博耘
2023-03-14
问题内容

我需要可以在mysql,postgres和其他主要DB上运行的联接的通用SQL查询。

我有一个名为autumn4.ip三列的表:(id, start, end所有整数)。

如何进行联接,以使我不按BETWEEN而是按JOIN来使用BUT?

像(伪):

SELECT * FROM autumn.ip WHERE :number-constant >= start
ORDER BY start DESC LIMIT 1;

SELECT * FROM autumn.ip WHERE :number-constant <= end
ORDER BY start ASC LIMIT 1;

如何将以上两个查询结合起来,得到以下结果:

SELECT * FROM autumn4.ip WHERE :number-constant BETWEEN START AND END LIMIT 1;

我正在尝试在start和上使用2个索引end。如果我在上使用BETWEEN和/或复合索引(start, end),则仅使用开始索引,而不使用结束索引。现在请不要告诉我我错了。我只是想要那样。我对此做了很多研究。

如果我确实为开始和结束创建单个索引,则仅使用一个。我正在寻找同时使用两者的查询。


问题答案:

一个简单的

SELECT * FROM autumn.ip WHERE :number-constant >= start
ORDER BY start DESC LIMIT 1
UNION
SELECT * FROM autumn.ip WHERE :number-constant <= end
ORDER BY start ASC LIMIT 1;

应该管用。

但是,让我质疑您的研究质量…



 类似资料:
  • 问题内容: 以下查询: 什么也不返回。 我应该有足够多的数据来使查询工作。我究竟做错了什么? 问题答案: 您的第二个日期早于您的第一个日期(即,您正在查询2010年9月29日至2010年1月30日之间)。尝试颠倒日期的顺序:

  • 我找不到这个问题的答案,因为它看起来非常复杂 这里我有 1 张 3 列的表格 CodeVal_1和CodeVal_2一起构成主键 所以这个表包含如下数据 现在我需要查询这个表作为 这完全适用于SQL服务器,但是每次查询调用都很慢。所以我想通过一些预加载等在整个C#代码中使其工作。 但是,我找不到比SQL server 2014更快的合适方法 有没有可能用某种双重索引(我不知道这个只是随口说说)、哈

  • 使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。

  • 所以除了上面的5个字段之外,core0中的rest all字段将为null。 下一个是核心1 核心1我们使用单独的查询索引3个字段 谢谢,拉维

  • 问题内容: 我有两个表: 这是我的查询: 并为此: 它在第一个表上使用的全索引扫描进行排序,但不使用y索引进行连接(在解释中)。这对性能非常不利,并且会杀死整个数据库服务器,因为这是一个非常频繁的查询。 我尝试使用反转表顺序,但这给了,甚至更糟。 有什么办法可以使mysql同时使用索引进行连接和排序? ===更新=== 我真的很绝望。也许某种形式的非规范化可以在这里有所帮助? 问题答案: 如果您有

  • 我可以使用Lucene查询ElasticSearch索引吗? 我使用ElasticSearch创建了一个索引,并插入了以下三个文档: null 不幸的是,d.get(“_source”)也返回null。 如何检索匹配查询的文档字段? 谢谢你。