我正在尝试从纬度和经度值落在某个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似乎不允许创建索引,例如
我的问题是,当列包含重复值或mySQL提供替代方法时,有一种方法可以使用索引。
索引可能是错误的路线,以减少搜索查询时间。如果是这样,任何有关替代方法的建议都非常受欢迎。提前致谢
答案 0 :(得分:0)
您应该创建KEY
,而不是PRIMARY KEY
。根据定义,主键是行的唯一标识符,但普通索引没有重复的问题。