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

标签 mysql sql oracle postgresql indexing

我需要一个通用的 sql 查询,用于可以在 mysql、postgres 和其他主要数据库上运行的连接。

我有一个名为 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;

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

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

最佳答案

一个简单的

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;

应该可以。

但是,让我质疑你的研究质量......

关于mysql - 如何使用索引在两列之间进行查询过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787915/

相关文章:

SQL 减号运算符

mysql - 如何仅从数据库中导出 View ?

php - 如何知道特定用户在特定 session 中访问了多少页

sql - 左连接和左外连接有什么区别?

c# - 使用 Dapper 调用 SQL 存储过程

sql - REGEXP 用于字符串格式化,以对用空格分隔的字符和数字进行分组

php - 面向对象的 PHP 和 MySQL

php - Codeigniter 3 迁移 sql

Android SQLite - 字符串以外的 selectionArgs

mysql - select查询在oracle中慢但在mysql数据库中快