[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: оптимизация запросов в БД
Страницы: 1, 2
savelikan
Привет всем) И вот, у меня вопрос с оптимизацией.
и так, у меня сайт онлайн тестирования. Вопросы в одной таблице, ответы - в другой. и так у меня 1400000 записей в таблице ответов, около 232000 вопросов.
Поиск вопроса: 1 запись Запрос занял 0.0005 сек.
Поиск ответа: 4 записи Запрос занял 0.2763 сек.
Я так понимаю, это нормально для локального хоста?

далее, если вопрос на установление соответствия (например 1-А,2-Б,3-Д.....), запрос в суме занимает около 0,8 сек, потому, что едёт два отдельных запроса: на поиск варантов ответа 1-4, потом на поиск вариантов ответа А-Д.
А есть вопросы, где нужно три раза искать ответы - тоесть запрос занимает около 1,2сек.

А если учесть, что при создании нового теста ИД всех вопросов и ответов сначала записываются в базу результатов тестирования, потом по ним генерируется страница, а вопросов на странице 50-60 - время генерации страницы составляет в среднем 5-8секунд на локальном хосте.

Что бы вы порекомендовали, чтоб повысить производительность скрипта и БД?

_____________
Одесса - мой город!)))
Valick
что-то у вас какие-то дикие цифры, запросы я так понимаю в цикле?

_____________
Стимулятор ~yoomoney - 41001303250491
T1grOK
А почему все варианты ответов не выбрать сразу, зачем делать несколько запросов?

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
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
savelikan, циклов быть не должно


_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
savelikan
Одним JOIN вытаскиваешь все необходимые вопросы и ответы к ним, потом в php разбираешь.

_____________
[продано копирайтерам]
T1grOK
И про RAND() лучше забыть..еще тот тормоз. В PHP дешевле перемешать.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
Цитата (Valick @ 23.12.2014 - 22:38)
savelikan, циклов быть не должно

Поиск вопроса
DO{
тип вопроса-один верный из 4х - поиск ответа
DO{
--
}
//-------
тип вопроса-установить соответствие - поиск ответа 123
DO{
--
}поиск ответа АБВ
DO{
--
}
//-----
}

T1grOK я пробова без рандом. Разница небольшая

_____________
Одесса - мой город!)))
T1grOK
Муть какая то с логикой...

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Я так понимаю штука эта выглядит как анкета, весь тест виден сразу.
Одним запросом выбираю все нужные вопросы и варианты ответов к ним.
Таким же одним запросом выбираю и проверяю соответстствия.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
savelikan
Вот такие у меня вопросы. как их храниить в БД, чтоб всё можно было упорядочить рандомно?

Я храню так
Чтото-1, , 1
Чтото-2, , 1
Чтото-3, , 1

ответА до 1, ,
ответБ до 1, ,
ответВ до 1, верный,

ответА до 2, ,
ответБ до 2, верный,
ответВ до 2, ,

Скрипт ищет сначала всё, что третяя колонка=1, потом до каждой ответ.
А как иначе?

_____________
Одесса - мой город!)))
Kusss
да писали уже , 1 запросом вытаскивай нужное количество вопросов и ответы на эти вопросы. и индексы в ответы пропиши , на номер вопроса.
savelikan
тоесть вот так:
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
Ммммммммм...... может кто подскажет?

_____________
Одесса - мой город!)))
Valick
savelikan, вопрос слишком расплывчатый и слишком глобальный. К тому же не ясна степень вашей подготовки. Отвечать от А до Я банально нет времени.
Вы спросили об оптимизации, но начинать надо не с запросов, а с описания ТЗ и архитектуры БД.


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.