Вот как я это сделаю:
SET @r := (SELECT ROUND(RAND() * (SELECT COUNT(*)
FROM accomodation a
JOIN accomodation_category c
ON (a.ac_category = c.acat_id)
WHERE a.ac_status != 'draft'
AND c.acat_slug != 'vendeglatohely'
AND a.ac_images != 'b:0;';
SET @sql := CONCAT('
SELECT a.ac_id,
a.ac_status,
a.ac_name,
a.ac_status,
a.ac_images
FROM accomodation a
JOIN accomodation_category c
ON (a.ac_category = c.acat_id)
WHERE a.ac_status != ''draft''
AND c.acat_slug != ''vendeglatohely''
AND a.ac_images != ''b:0;''
LIMIT ', @r, ', 1');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Попытайтесь использовать профилировщика на своем под управлением коде. Это должно помочь Вам определить узкие места. Судите профилировщик Netbeans или jprofiler
Я часто - достаточно счастливое использование Java -Xprof
. Это дает Вам отсортированный список функций, в которых Ваш код проводит большую часть своего времени.
В целях тестирования/разработки можно загрузить Oracle Управление полетом JRockit бесплатно от этого сайта. (Требует Входа в систему, но учетные записи могут быть настроены с любым адресом электронной почты),
Документы Здесь. Это позволит Вам находить горячие точки, утечки памяти и многое другое.
При работе Java 6, можно использовать предоставленные контрольные инструменты