metadige Evet az önce count şeklinde kullandım ve mysql 'a erişemedim kısa bir süre. Bu günlük veritabanı güncellemesi bittiği için count şeklini yarın denicem 5 dakkalık cache kullanıyorum şu anda işimi görüyor. Fakat site yeni açıldı şu anda. Bakalım ilerde ne olucak Herkese teşekkürler

Maximumu bulmak icin select sutun demek yerine select max kullanımı daha iyi. 5 değil güvenli olsun diye 10 tane random sayı yaratıp, php sorgunun içinde dönerken 5 tane basıldığında break; ile çıkılabilir. Atlayan sayılar kaç tane ki.

O zaman php ile random 15 sayı seçip sqlden 10 tanesini almak daha mantıklı olabilir gibi. Örneğin: PHP:

-angelo: bu işlem sunucuyu rand a göre daha azmı yorar?

Şu şekilde yazdım fakat tam deneyemedim. PHP:

metadige Bu kadar karşılaştırma yapan bir fonksiyon büyük veritabanlarında sorun yaratmaz mı? Yaptığım sistem şu şekilde - Sayfaya kategoriye ait içerik basılıyor örnek: 30 tane - Bir bölüm için 10 tane random veri alınıyor. - Başka bir bölüm için 5 tane random veri alınıyor. Bu veritabanı ilerde en az 100 bin kayıttan oluşacak. Bu arada count ile max arasında hız farkı varmıdır?

random çektiğin verileri başka dosyadan çekip, mysql cache yerine file cache kullanıp nerede olması gerekiyorsa oraya dosyayı include edip de kullanabilirsin

hit çok fazla olmadığı sürece order by rand o kadar da sorun yaratmaz. metadige ve angelo nun önerisinde, id tablon sıralı değilse yani eksik varsa eksik veri gelebilir. şu şekilde de yapabilirsin; PHP:

Angelo arada sildiğim toplam 20 tane id no var sadece. Şu anki bayağı hızlı çalışıyor gözlemlediğim kadarıyla. Bunun üzerinde çalışayım ve dediklerini uygulayarak yapayım birde.

En mantıklısı sadece random olarak alınan bölgeyi cachelemektir eğer bu sistemi uyguladıysanız ve belirttiğiniz gibi sorgu sürekli olarak gene çalışıyorsa bir yerde hata yapmışsınızdır. Bence bunun üzerinde durun. Ama onun dışında yapılacak işlemler içinde birkaç düzenleme yapmak daha iyi bir yaklaşım olabilir. Mesela: PHP:

angelo nun yazdığı ilk kod hızlı çalışır fakat 1 ile 100 arasında 5 sayı seç dedik diyelim. 1-10-15-34-56 i seçti WHERE id IN (1,10,15,34,56) kodunu yazdık. Sistemimizde 10-15 nolu kayıt silinmiş olabilir bu yüzden hata verebilir. Düzeltmek içinde bir iki tane for eklemek yerine direk sql in içinde rand ı çalıştırmak daha mantıklı.

Sanıyorum o tür pek de zor olmaz. Devamlı sorgu yapıp alınan veriyi dosya içine kaydettikten sonra ilgili bölümde göstermek. Şimdilik 3000 'e yakın sayfa var ve her birinin ayrı random üretmesi şart. Bunu nasıl sağlayabilirim file cache sistemi ile?

Teşekkürler Invictus bu şekilde de denerim daha sonra. Şu anda fazla kayıt olmadığı için sorgulardaki problemleri göremiyorum. Şu an için deneyip gördüğüm tek şey anlık gelen 30-40 ziyaretçinin verdirdiği hatalar. Bunlarada şimdilik çözüm buldum gibi görünüyor.

metadige sadece yüksek sayılarda çekilmiyor veriler gördüğüm kadarıyla. Anlık 30 veya 40 giriş olduğunda saçmalıyordu sql içindeki rand normal olarak. Phpmyadmin işlemler bölümünde kontrol ettiğimde 100 tane sorguyu görebiliyordum arka arkaya. Fakat şu ankinde en fazla 7 veya 8 tane yakalayabiliyorum. Tabiki 15 bin kayıt birşey değil daha fazla kayıt üzerinde denemek lazım bunu. Bu arada veritabanı devamlı güncellendiği için güncel random veri almam şart. Sınırlamak istemiyorum aldığım veriyi.

Zannetmem sorun yapacağını, daha doğrusu sql'den rand komutu ile almaktansa çok daha hızlı olur çok fazla kayıtlı tablolarda, çünkü alınacak idleri söylüyoruz sqle, 2-3K ve üzeri kayıtlı tablolarda order by rand kullanımı zaten sakat seninde farkında olduğun gibi Bunun dışında count ile max arasında hız farkı olur. Count olarak kullanmak akıllıca değil, yukarıda kullandığım gibi count şeklinde kullanmalısın. Bu şekilde kullanımı gayet hızlıdır, çünkü index sütunu bilgileri tutulmaktadır. Büyük bir taboda optimizasyon için indexleri doğru şekilde ayarlamalı ve sorgularda gereksiz bölümleri almaktan kaçınmalısın, birde online sayın çok fazla ise, basit bir şekilde cache kullanman daha iyi gibi. Yani cronjobla falan, en azından 10 dakikada dahi değişsen 100 lerce gereksiz sorgudan kurtulursun, ki giriş sayısına göre 1000 lerce de olabilir.

ID'lerde atlama yoksa, php de 10 tane random üret, WHERE id IN ('1','257','867') gibi bir sorgu yapabilirsin.

Fazlza Kullanmadığım için MySQL'de RAND tam bilemiyorum. Iki tip query'i analiz edip cevap zamanlarına göre karar verilebilir aslında. Varsa öyle 1 milyon verili bir tablo deneyen sonucu paylaşırsa iyi olur.

Arkadaşım tabii ki ilkine göre biraz daha az yorar çünkü ilkinde misal 15000 kayıttan rand yapıyorsa 2. den 8700 den sonraki kayıtlardan rand hesaplamakta. Ancak unutma ki rand le dönen sayı her zaman yüksek olmaz misal 10 da olabilir. Bu arada id in ile seçilen veri varsa sonuç döner, yoksa hata vermez, o bakımdan sorun olmaz yani, sadece dönen veri az olabilir. Peki şöyle bir şey yapsan, diyelim rand ile bir sayı belirleyip idi o sayıdan küçük 10 kayıt veya büyük 10 kayıt diye seçsen, işini görmez mi? Peşpeşe olan kayıtları çeker ancak, diğerlerine göre çok daha az yoracağı kesin.

Evet kayıtlarda birkaç atlama var oralara denk gelirse sorun yaşayabilirim. Bu arada yazdığım kod sql içindeki rand 'dan daha hızlı çalışıyor veya ben yanlış görüyorum. Benim yazdığım kodu da deneyebilecek olursa sevinirim. Bu arada benim deneme şeklim dışarıdan ayrı sayfalara gelen anlık 30 bağlantı civarında. Server adsl üzerinde bu arada.