当列包含重复值时,如何使用索引优化mySQL查询

时间:2016-06-23 23:50:15

标签: php mysql

我正在尝试从纬度和经度值落在某个n米半径范围内的表中检索所有消息。

$messages = DB::table('messages')->select('*')
                                 ->whereBetween( 'latitude', array($userLatitudeFloor, $userLatitudeCeil) ) 
                                 ->whereBetween( 'longitude', array($userLongitudeCeil, $userLongitudeFloor) )
                                 ->where('message_permission', 'public')
                                 ->orderBy('timestamp', 'DESC')
                                 ->take(100)
                                 ->get();

在尝试优化查询时间时,我尝试在纬度列上使用主键索引。但是,当列包含重复值时,mySQL似乎不允许创建索引,例如

enter image description here

我的问题是,当列包含重复值或mySQL提供替代方法时,有一种方法可以使用索引。

索引可能是错误的路线,以减少搜索查询时间。如果是这样,任何有关替代方法的建议都非常受欢迎。提前致谢

1 个答案:

答案 0 :(得分:0)

您应该创建KEY,而不是PRIMARY KEY。根据定义,主键是行的唯一标识符,但普通索引没有重复的问题。