【发布时间】:2014-06-05 11:52:23
【问题描述】:
我有一个包含事件的大表。他们中的大多数都有经度+纬度。但有些没有。
当我查找事件列表时,我总是包含 WHERE longitude!=0 AND latitude!=0
是否有可能在索引中或通过其他方式有一个预过滤器来消除非地理定位事件。
PS:我需要将那些非地理定位事件保留在我的表中。
SELECT * FROM events WHERE start_time > NOW() AND latitude != 0 AND longitude != 0
【问题讨论】:
-
如果您有不知道纬度和经度的事件,将它们存储为 NULL 可能比 0 更合适。0 是纬度和经度的合法值。 NULL 表示“不知道”或“没有值”。
-
这是有道理的。我想知道在 Non NULLS 上进行搜索是否比在 != 0 上进行搜索更快
-
它可能会让事情变得更快一点,是的(因为 NULL 值可能没有存储在索引中,因此必须在索引中检查更少的值),但这不是你应该这样做的原因用来做开关。这只是一个快乐的副作用。 (但我不能权威地谈论 MySQL 如何对 NULL 值进行索引)