gpt4 book ai didi

mysql - 寻找最接近的值。如何告诉MySQL数据已经有序了?

转载 作者:行者123 更新时间:2023-11-29 10:39:03 25 4
gpt4 key购买 nike

假设我有一个如下表:

+-----------+------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+------------+------------+------+-----+---------+
| datetime | double | NO | PRI | NULL |
| some_value | float | NO | | NULL |
+------------+------------+------+-----+---------+

日期必须是 double 的,并且以带有小数秒的unix时间注册(不可能安装mysql 5.6来使用小数DATETIME)。此外,datetime 字段的值不仅是主要的,而且还一直在增加。我想找到最接近某个值的行。通常你可以使用类似的东西:

select * from table order by abs(datetime - $myvalue) limit 1

但是,我担心这个实现对于数十万个值来说会很慢,因为它将在所有数据库中进行搜索。由于我有一个有序列表,我知道我可以进行一些二分搜索来加速该过程,但我不知道如何告诉MySQL执行此类操作搜索。

为了测试性能,我执行以下几行:

SET profiling = 1;
SELECT * FROM table order by abs(datetime - $myvalue) limit 1;
SHOW PROFILE FOR QUERY 1;

结果如下:

+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000122 |
| Waiting for query cache lock | 0.000051 |
| checking query cache for query | 0.000191 |
| checking permissions | 0.000038 |
| Opening tables | 0.000094 |
| System lock | 0.000047 |
| Waiting for query cache lock | 0.000085 |
| init | 0.000103 |
| optimizing | 0.000031 |
| statistics | 0.000057 |
| preparing | 0.000049 |
| executing | 0.000023 |
| Sorting result | 2.806665 |
| Sending data | 0.000359 |
| end | 0.000049 |
| query end | 0.000033 |
| closing tables | 0.000050 |
| freeing items | 0.000089 |
| logging slow query | 0.000067 |
| cleaning up | 0.000032 |
+--------------------------------+----------+

据我了解,对结果进行排序需要 2.8 秒,但我的数据已经排序。作为附加信息,我有大约 240,000 行。

最佳答案

它不会扫描整个数据库。主键由 B 树索引。如果你能做到,那么强制它进行二分搜索会,但你做不到。

关于mysql - 寻找最接近的值。如何告诉MySQL数据已经有序了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45877245/

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