gpt4 book ai didi

Mysql 值索引!= 0

转载 作者:行者123 更新时间:2023-11-29 12:56:00 25 4
gpt4 key购买 nike

我有一个包含事件的大表。他们中的大多数都有经度+纬度。但有些则不然。

当我查找事件列表时,我总是包含WHERE longitude!=0 AND latitude!=0

是否可以通过索引或其他方式设置预过滤器来消除非地理定位事件。

PS:我需要将那些非地理定位事件保留在我的表中。

SELECT * FROM events WHERE start_time > NOW() AND latitude != 0 AND longitude != 0  

最佳答案

在大多数情况下,索引不会对性能产生影响。主要问题是选择性。也就是说,有多少比例的事件经过地理定位,有多少比例没有。

扫描表时,数据库需要读取所有页。索引使事情变得更快的一种方法是减少需要读取的页面数量。但是,这可能是违反直觉的。如果典型记录为 80 字节,则每页可容纳大约 100 字节。因此,即使只有 5% 的事件经过地理定位,也很有可能需要读取所有页面。平均页面有 5 条这样的记录。换句话说,索引并没有节省太多工作(甚至可能会导致更多工作,但这是另一个问题)。

对此有一些警告。在表上创建主键索引并将“地理定位”标志作为第一个元素会影响页面布局。除最多一页外的所有页面都将仅包含地理定位记录或非地理定位记录。这将提高性能。

对于您的特定查询,最好的索引可能是events(start_time)。由于select *,查询无论如何都需要去数据页获取数据,并且可以同时返回纬度和经度。

关于Mysql 值索引!= 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059512/

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