gpt4 book ai didi

sql - 使用索引在mysql中进行整数比较

转载 作者:行者123 更新时间:2023-11-29 01:33:51 25 4
gpt4 key购买 nike

我需要比较 mysql 表中的整数。很简单,但是这个表相当大...所以查询需要很长时间。没问题,我可以使用索引。根据 MySQL documentation ,我应该能够使用索引进行比较运算符:“B 树索引可用于使用 =、>、>=、<、<= 或 BETWEEN 的表达式中的列比较”

但是,当我尝试这样做时,它对性能没有影响,并且根据解释没有使用索引 :(

SELECT * FROM Node n WHERE n.X < 800000

这导致性能极差,调用解释显示我们的“Rectangle_Index”是 possible_keys 但实际上使用了 NULL 键...这是创建表语句:

CREATE TABLE `Visual_Node` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`X` bigint(20) NOT NULL,
`Y` bigint(20) NOT NULL,
`X_plus_Width` bigint(20) DEFAULT NULL,
`Y_plus_Height` bigint(20) DEFAULT NULL,
PRIMARY KEY (`Id`),
KEY `Rectangle_Index` (`X`,`X_plus_Width`,`Y`,`Y_plus_Height`)
) ENGINE=InnoDB AUTO_INCREMENT=4340743 DEFAULT CHARSET=latin1

任何人都可以帮助这个查询吗?我要运行的实际查询如下:

SELECT * FROM Node n WHERE 800000 BETWEEN n.X and n.X_plus_Width AND 1234567 BETWEEN n.Y and n.Y_plus_Height

更新(在以下答案之一中提出)下面是基本查询的解释输出:改变表结构对我来说非常困难。这是我解释的输出:

mysql> explain select * from Node n where n.X < 800000;     
+----+-------------+-------+------+-----------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+-----------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | n | ALL | Rectangle_Index | NULL | NULL | NULL | 173952 | Using where |
+----+-------------+-------+------+-----------------+------+---------+------+--------+-------------+
1 row in set (0.02 sec)

最佳答案

如果您将查询重写为

SELECT * 
FROM Node n
WHERE
n.X <= 800000 AND
n.X_plus_Width >= 800000 AND
n.Y <= 1234567 AND
n.Y_plus_Height >= 1234567

Mysql 可以为一列使用索引(它不能为超过 1 个范围条件使用索引,而你有 4 个。

我建议你看看Spatial extensions

关于sql - 使用索引在mysql中进行整数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108715/

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