Sitemde çevrimiçi olan kullanıcıları takip etmem gerekiyor, böylece çevrimiçi olan kullanıcıların avatarlarının yanında "çevrimiçi" simgesi gösterebiliyorum.Bu şekilde yaptığımda MySQL sorgum neden bu kadar hızlı ve neden bu kadar yavaş?
UPDATE `users`
SET `last_seen` = CURRENT_TIMESTAMP
WHERE `user_id` = '$user_id'
Şimdi hemen bundan sonra, ben yürütün:
bu tespit ilk adım yüzden bir güncelleştirme sorgusu kullanıcı sayfasını her yapıyorum kullanıcı son ne zaman görüldüğünü takip etmektir Ben ana sayfasında bunları görüntüleyebilir, böylece başka bir sorgu, bu bir kesin kriter altında sitemin tüm kullanıcıları alır:
SELECT *,
(ACOS(SIN(0.7103989219783) * SIN(RADIANS(users.latitude)) + COS(0.7103989219783) * COS(RADIANS(users.latitude)) * COS(RADIANS(users.longitude) - -1.2894447135174)) * 6371) AS SearchRadius
FROM `users`
INNER JOIN `profiles` ON (
users.user_id = profiles.user_id
)
WHERE (users.latitude > 38.904216788163 AND users.latitude < 42.501503211837)
AND (users.longitude > -76.252301637251 AND users.longitude < -71.507178362749)
AND (ACOS(SIN(0.7103989219783) * SIN(RADIANS(users.latitude)) + COS(0.7103989219783) * COS(RADIANS(users.latitude)) * COS(RADIANS(users.longitude) - -1.2894447135174)) * 6371) < 200 AND users.sex = '1' AND users.seeking = '2' AND users.user_id != '1' AND users.account_status = '1' LIMIT 0, 10
bu sorgunun delilik Aldırma, temelde nokta aynı users
seçerek am olduğunu daha önce güvendiğim tablo ing. Ben birbiri ardına bu 2 sorgular birini çalıştırdığınızda
bu alıyorum zamanlardır:
1st query: 0.0392 seconds
2nd query: 1.5396 seconds
Bu sayfa yüklenme süresinde farkedilir bir gecikmeye neden olur.
Şimdi çevrimiçi kullanıcılar için ayrı bir tablo oluştururken ve bu ilk sorgu değiştirin:
UPDATE `online_users`
SET `last_seen` = CURRENT_TIMESTAMP
WHERE `user_id` = '$user_id'
kez bu şekilde değiştirildi:
1st query: 0.0411 seconds
2nd query: 0.0008 seconds
ve sayfa yüklendiğinde çok daha hızlı!
Bu neden? Tahminimce masa kilitleme ile ilgili bir şey var ama emin ya da daha fazla bilgi bilmek için yeterli bilmiyorum.
İkinci sorgu hala doğru sonuçları döndürüyor mu? –
Eğer ikinci sorguyu ilk olmadan çalıştırırsanız daha hızlı mı? Bir çeşit G/Ç sorunu olabilir - MySQL içersinde yokum, ama SQL'de engelleme gibi bir şey olmamalı, her şeyden sonra aynı işlemde aynı bağlantıda. Bu durumda, kabul edilmeyen değişiklikleri görmesine izin verilir veya değişiklikler zaten taahhüt edilir. InnoDB veya MyISAM kullanıyor musunuz? –
@Cade Roux Yalnızca 2. sorguyu çalıştırırsam daha hızlıdır, ancak sadece 0.0004'te bir dakika kadardır. MyISAM kullanıyorum. – TK123