2014-02-10 108 views
0
SELECT user.name, user.age, user.lastlogin, user.loguserid,user.sex, (3963.17 * ACOS(COS(RADIANS(54.662280100000)) * COS(RADIANS(latitude)) * COS(RADIANS(-1.630407900000) - RADIANS(longitude)) + SIN(RADIANS(54.662280100000)) * SIN(RADIANS(latitude)))) AS distance_in_miles 
FROM user 
WHERE latitude != '' 
AND longitude != '' 
AND loguserid !=526306 
AND age >18 AND age <=50 
AND sex !=0 
AND (3963.17 * ACOS(COS(RADIANS(54.662280100000)) * COS(RADIANS(latitude)) * COS(RADIANS(-1.630407900000) - RADIANS(longitude)) + SIN(RADIANS(54.662280100000)) * SIN(RADIANS(latitude)))) <=50 
AND NOT EXISTS (SELECT blockuser.userid 
FROM blockuser 
WHERE blockuser.newuserid = user.loguserid 
AND blockuser.userid =526306 AND siteid =1071) 
AND NOT EXISTS (SELECT fav.userid FROM fav WHERE fav.favuserid =user.loguserid 
AND siteid =1071 AND fav.userid =526306) ORDER BY `user`.`loguserid` DESC 

这是我的sql?它总是显示不同的执行时间吗?任何帮助将不胜感激。mysql采取不同的执行时间

+0

那么你的问题是什么? – Steve

+0

任何帮助什么? –

回答

0

MySql有一个查询缓存。如果第二次执行相同的语句,通常与第一次执行相比,这只需要部分时间,因为结果可以从查询缓存中获取。

缓存失效/清除后,再次需要更多时间执行。

根据数据库上还有什么其他的客户在做,也许这种说法等待表锁释放所需要的子查询等,有中锁优先级为SELECTINSERTUPDATE这可能应用。

+0

请更新我的查询,如果它需要更改。为什么它显示不同的执行时间。我需要恒定的时间来执行此 – user3292505

+0

“恒定时间”是不可能实现像DBS一样的MySQL。如果在mysql配置中启用了这个功能,你可以在查询中加入''SELECT SQL_NO_CACHE ...'',看这里:[mysql](http://dev.mysql.com/doc/refman/4.1/en/query -cache-in-select.html) –

+0

添加这个SQL_no_CACHE会影响我的php文件,其中这个查询已经生效 – user3292505