Greshnick
21-08-2015, 22:47
Доброго времени суток, жители форуме OSZone. Пишу Вам, не без надежды на помощь. Вопрос в следующем. Имеется база данных с таблицей размером в 10767 записей. На СУБД MySQL. Стоит на ноутбуке HP Presario CQ56 Pentium (R) Dual Core T4500 2.30 GHz. 2 Гб оперативы. ОС Win 7 Максимальная. Создал процедуру для осуществления задачи отбора случайных 25 записей из таблицы. Текст процедуры:
DELIMITER //
CREATE PROCEDURE create_temp_table ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
BEGIN
DROP TEMPORARY TABLE IF EXISTS temp_table;
SET @a = 0;
CREATE TEMPORARY TABLE temp_table (SELECT (@a := @a + 1) as id_num, id From questions);
END
В скрипте php будет генерироваться 25 случайных значений и из временной таблицы будет взято ID вопросов и осуществлен запрос на получение конкретных 25 вопросов. Что быстрее идет намного. Чем ORDER BY RAND(). Проведя нагрузочное тестирование процедуры получил следующие значения при 50 пользователях время выполнения процедуры заняло 21.967 - первый прогон, 18.469 - второй прогон. Вопрос в том, хорошие ли это показатели. Или нужно искать другой вариант решения поставленной задачи.
DELIMITER //
CREATE PROCEDURE create_temp_table ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
BEGIN
DROP TEMPORARY TABLE IF EXISTS temp_table;
SET @a = 0;
CREATE TEMPORARY TABLE temp_table (SELECT (@a := @a + 1) as id_num, id From questions);
END
В скрипте php будет генерироваться 25 случайных значений и из временной таблицы будет взято ID вопросов и осуществлен запрос на получение конкретных 25 вопросов. Что быстрее идет намного. Чем ORDER BY RAND(). Проведя нагрузочное тестирование процедуры получил следующие значения при 50 пользователях время выполнения процедуры заняло 21.967 - первый прогон, 18.469 - второй прогон. Вопрос в том, хорошие ли это показатели. Или нужно искать другой вариант решения поставленной задачи.