我正在使用“解释”来查看为什么我的查询会命中数据库中的每一行,但我不明白为什么会这样。
有人可以看看并给我一个提示我错过了什么吗?
我的数据库是 MyISAM,我使用的是 Mysql 5.1,PHP5
这是我的桌子:
--
-- Table structure for table `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`user_id` bigint(20) NOT NULL auto_increment,
`name` varchar(40) default NULL,
`city` varchar(90) default NULL,
`latitude` float NOT NULL default '0',
`longitude` float NOT NULL default '0',
PRIMARY KEY (`user_id`),
UNIQUE KEY `name` (`name`),
KEY `Radius Search` (`latitude`,`longitude`),
KEY `Radius 2` (`longitude`,`latitude`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=38666 ;
这是我的查询:
$query =
"SELECT
name, city
FROM
users
WHERE
(
(69.1 * (latitude - " . $user->latitude . ")) *
(69.1 * (latitude - " . $user->latitude . "))
) + (
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3)) *
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3))
) < " . pow($radius, 2) . "
ORDER BY
(
(69.1 * (latitude - " . $user->latitude . ")) *
(69.1 * (latitude - " . $user->latitude . "))
) + (
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3)) *
(69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . " / 57.3))
) ASC";
最后,我的解释...
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE users ALL NULL NULL NULL NULL 38665 Using where; Using filesort