1 milyon kayıttan rand ile alırsanız elbetteki performans sorunu olur.
Mysql'de bir view oluşuturun, bu view'de sadece ID olsun ya da sadece RAND ile almak istediğiniz başlıklar olsun. Ya da başka bir mantık geliştirin sorgunuza göre, view'de tutun bunları. Sonra view tablonuzdan rand yaparsınız. Sorgunuz sırasındaki çekilen veri ne kadar az olursa o kadar iyi.
Cache yapmak diğer çözüm. Cache süresi dolduktan bir sonraki cache sırasında yine sorgu zamanı çok olacak. Cache mutlaka kullanmanız gerekiyor. Tavsiyem memcache. Sunucu sizin elinizdeyse server side memcache kurun ve sorgularınız da optimize edin.
Kolay gelsin
Büyükçe bir MySQL veritabanından rastgele bir veri çekmem gerekiyor. Ancak rand() kullanımı oldukça yavaşlatıyor işlemi. Daha iyi bir öneriniz var mı? İlgili tabloda eksiksiz bir primary key yok maalesef. Arada silinmiş verilerden ötürü sıçramalar mevcut. Bu da kayıt sayısını belirleyip aradan rastgele bir sayı seçip bunu kullanarak veriyi seçmeyi engelliyor haliyle. Şuan aklıma gelen tek çözüm sql sorgusunda order by rand() limit 1 ile veriyi çekmek ancak bu da oldukça yavaş.