savelikan
24.12.2014 - 00:18
Привет всем) И вот, у меня вопрос с оптимизацией.
и так, у меня сайт онлайн тестирования. Вопросы в одной таблице, ответы - в другой. и так у меня 1400000 записей в таблице ответов, около 232000 вопросов.
Поиск вопроса: 1 запись Запрос занял 0.0005 сек.
Поиск ответа: 4 записи Запрос занял 0.2763 сек.
Я так понимаю, это нормально для локального хоста?
далее, если вопрос на установление соответствия (например 1-А,2-Б,3-Д.....), запрос в суме занимает около 0,8 сек, потому, что едёт два отдельных запроса: на поиск варантов ответа 1-4, потом на поиск вариантов ответа А-Д.
А есть вопросы, где нужно три раза искать ответы - тоесть запрос занимает около 1,2сек.
А если учесть, что при создании нового теста ИД всех вопросов и ответов сначала записываются в базу результатов тестирования, потом по ним генерируется страница, а вопросов на странице 50-60 - время генерации страницы составляет в среднем 5-8секунд на локальном хосте.
Что бы вы порекомендовали, чтоб повысить производительность скрипта и БД?
_____________
Одесса - мой город!)))
Valick
24.12.2014 - 00:30
что-то у вас какие-то дикие цифры, запросы я так понимаю в цикле?
_____________
Стимулятор ~yoomoney - 41001303250491
T1grOK
24.12.2014 - 00:31
А почему все варианты ответов не выбрать сразу, зачем делать несколько запросов?
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
24.12.2014 - 00:35
Valick если один вопрос на страницу - то нет. А если много, то да, на каждый вопрос цикл на ответы
T1grOK если тип вопроса на установление соттветствия, тогда первый раз поиск вариантов ответов 1,2,3, RAND(); второй раз - ответы АБВГ RAND()
CREATE TABLE IF NOT EXISTS `testing_answers` (
`testing_answers-id` int(11) NOT NULL AUTO_INCREMENT,
`testing_answers-question` int(11) NOT NULL,
`testing_answers-answer` text NOT NULL,
`testing_answers-true` text NOT NULL,
`testing_answers-inf` int(11) NOT NULL,
PRIMARY KEY (`testing_answers-id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1418556 ;
_____________
Одесса - мой город!)))
Valick
24.12.2014 - 00:38
savelikan, циклов быть не должно
_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
24.12.2014 - 00:40
savelikan
Одним JOIN вытаскиваешь все необходимые вопросы и ответы к ним, потом в php разбираешь.
_____________
[продано копирайтерам]
T1grOK
24.12.2014 - 00:41
И про RAND() лучше забыть..еще тот тормоз. В PHP дешевле перемешать.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
24.12.2014 - 00:43
Цитата (Valick @ 23.12.2014 - 22:38) |
savelikan, циклов быть не должно |
Поиск вопроса
DO{
тип вопроса-один верный из 4х - поиск ответа
DO{
--
}
//-------
тип вопроса-установить соответствие - поиск ответа 123
DO{
--
}поиск ответа АБВ
DO{
--
}
//-----
}
T1grOK я пробова без рандом. Разница небольшая
_____________
Одесса - мой город!)))
T1grOK
24.12.2014 - 00:45
Муть какая то с логикой...
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
24.12.2014 - 00:50
Я так понимаю штука эта выглядит как анкета, весь тест виден сразу.
Одним запросом выбираю все нужные вопросы и варианты ответов к ним.
Таким же одним запросом выбираю и проверяю соответстствия.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
24.12.2014 - 00:51
Вот такие у меня вопросы. как их храниить в БД, чтоб всё можно было упорядочить рандомно?
Я храню так
Чтото-1, , 1
Чтото-2, , 1
Чтото-3, , 1
ответА до 1, ,
ответБ до 1, ,
ответВ до 1, верный,
ответА до 2, ,
ответБ до 2, верный,
ответВ до 2, ,
Скрипт ищет сначала всё, что третяя колонка=1, потом до каждой ответ.
А как иначе?
_____________
Одесса - мой город!)))
да писали уже , 1 запросом вытаскивай нужное количество вопросов и ответы на эти вопросы. и индексы в ответы пропиши , на номер вопроса.
savelikan
24.12.2014 - 15:10
тоесть вот так:
SELECT *
FROM `testing_questions`
RIGHT JOIN `testing_answers` ON (`testing_answers`.`testing_answers-question` = `testing_questions`.`testing_questions-id`)
WHERE `testing_questions-toppic` = 1
ORDER BY `testing_questions-id`
и проверять ид, если такое же, как предыдущее - значить это вариант ответа?
_____________
Одесса - мой город!)))
savelikan
24.12.2014 - 22:18
Ммммммммм...... может кто подскажет?
_____________
Одесса - мой город!)))
Valick
24.12.2014 - 23:07
savelikan, вопрос слишком расплывчатый и слишком глобальный. К тому же не ясна степень вашей подготовки. Отвечать от А до Я банально нет времени.
Вы спросили об оптимизации, но начинать надо не с запросов, а с описания ТЗ и архитектуры БД.
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.