0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
1

Как оптимизировать запросы к БД

14.07.2014, 00:55. Показов 933. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть таблица с огромным количеством столбцов .. около 400 условно можно обозначить которые как характеристики товара. товаров в таблице тоесть строк ну пусть будет 500 и в будущем будет увеличиваться.
в ячейках таблицы хранится информация о товаре , и в основном она = 0 и не нужна ... но запрос идет по айди и получается вынимает все 400 значений так как не известно в каких именно ячейках данного товара информация актуальна ... запрос делается в цыкле который выполняется от 1 до 35 раз запрашивая информацию об етих всех товарах .. в зависимости сколько их должно появится .. е если 2-3 товара то еше норм ... а если больше то оно все ощутимо начинает виснуть .. а если ети запросы будут делать одновременно 10-100 человек .. так все умрет ... КАК ОПТИМИЗИРОВАТЬ ЕТО ВСЕ ? ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2014, 00:55
Ответы с готовыми решениями:

Как оптимизировать sql запросы?
интересно как вы оптимизируете sql запросы в ваших скриптах поделитесь идеями и опытом ?

Оптимизировать вложенные запросы
Здравия желаю!:drink: Мучаю Nested Sets, но не в них суть. Как можно переделать вот такой...

Оптимизировать запросы на добавление прайса
В общем приходят остатки Аптек каждый день, и я получаю из формата *.dbf (сам процесс пропустим) в...

Как в Access объединить запросы в один или вывести эти запросы в одном отчете и рассчитать по ним коэффициент?
Добрый день! Помогите разобраться. Есть у меня 5 запросов access, которые через долгие...

12
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
14.07.2014, 01:07 2
А где код? Структура БД?
А то есть [ссылка на форум] для таких вопросов...
0
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
14.07.2014, 01:12 3
400 полей(столбцов)? ужас! ели точно знаешь, какая именно инфа актуальна, скопируй таблицу и удали ненужные поля, а потом замени старую таблицу на новую.
0
0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
14.07.2014, 01:22  [ТС] 4
та какой код ? обычный селект запрос в цикле запрашивает 400 ячеек из базы .. все тупит .. 10 человек одновременно зайдут на страницу с циклом и все умрет .. как упростить ето все ? может не в базе хранить а в текстовом , или ексель .. или может не 400 вынимать из базы а как-то определять только нужные .. или хз ..

Хочешь код ?? ну на код

PHP
1
2
for ($j = 0; $j <count($my_stat_all); $j++) {
    $predmet=$db->my_mysql_select('SELECT  *  FROM  predmetu WHERE   id_predmeta_bazar="'.$predmet1[$skolko-1]['id_predmeta_bazar'].'" ');                                                                                                                                      }
Добавлено через 2 минуты
они все нужны .. ну у одного предмета одни столбцы актуальны а у второго другие ... к примеру у одного предмета нужено значение 200 столбца .. а у второго 200 ,201 , 202.. П.С. ну я утрирую что 400 .. но много больше 200

Добавлено через 2 минуты
может не в базе ето все хранить ??

Добавлено через 3 минуты
или как то по смромнее ето все хранить ? слышал что то про JSON но не знаю для чего оно ...
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
14.07.2014, 01:24 5
Цитата Сообщение от G-leb Посмотреть сообщение
Хочешь код ?? ну на код
Ну спасибо, это одолжение? ваше величество забыло про структуру БД

По существу это писец. Зачем запрос внутри цикла?
0
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
14.07.2014, 01:26 6
Скажем так, что параметры можно хранить в одном текстовом поле в виде {"type":"box","color":"red"}
Разумеется, нужно изменить код обработчика. Но тогда невозможно будет отсортировать товары по полям (я имею в виду непосредственно в запросе), например, по типу, по цвету и пр. Тут ты должен сам уточнить приоритеты свойств.

О, а я то и не заметил запросы внутри цикла. Поэтому и нагрузка получается.
0
0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
14.07.2014, 01:33  [ТС] 7
А как делать запрос ? вне цикла ? если один раз нужно информацию по 10 предметов .. а второй раз про 1 предмет .. а третий раз про 30 предметов .. а четвертый вообще ниодного ?

Добавлено через 1 минуту
параметр представляет собой несколько чисел .. и так в 95% ячейках

Добавлено через 1 минуту
то лучще хранить их и 1 текстовом поле ? .. и вынимать как текст .. а как потом разобратся чтоб работать с етими значениями ?
0
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
14.07.2014, 01:37 8
судя по коду, там хоть 100 или 1000 раз будет выборка одной записи
0
0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
14.07.2014, 01:41  [ТС] 9
ето левый код .. я как пример привел .. чтоб не искать именно тот который сейчас работает
0
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
14.07.2014, 01:42 10
А если нужно выбрать массив адресов, то одним запросом 'SELECT * FROM predmetu WHERE id_predmeta_bazar IN(массив);
И сразу получишь выборку сколько нужно, а потом делаешь обход и работаешь с каждой записью.
0
0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
14.07.2014, 01:49  [ТС] 11
та как ? лучше все хранить в 1 текстовом поле ?? .. а как потом сортировать значения етого поля и определить все елементы ? и кпримеру просумировать 155 елемент первого предмета с 155 елементом второго третьего предмета

Добавлено через 6 минут
ага тоесть лучше делать 1 запрос нужных предметов .. и потом цыклом их переберать да ?
0
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
14.07.2014, 02:02 12
Лучший ответ Сообщение было отмечено G-leb как решение

Решение

если хранить по типу JSON, в поле params, то
PHP
1
2
3
4
5
6
7
$predmet = ... (запиь из БД)
$_predmet = json_decode($predmet ['params']);
foreach($_predmet as $key=>$value){
//тут происходит последовательный перебор  структурированной записи "type":"box","color":"red"
// как "type"=>"box","color"=>"red"
//и что-то делаем с этой фигней
}
чтобы записать все параметры в БД, нужно их заложить в архив, типа,
PHP
1
array("type"=>"box","color"=>"red")
а потом перекодировать
PHP
1
$params = json_encode(наш массив);
и обновить запись
SQL
1
'UPDATE INTO predmetu SET params ="$params" WHERE id_predmeta_bazar=нужный ид'
Добавлено через 4 минуты
А вообще-то не заморачивайся с JSON, а то еще больше запутаешься.
1
0 / 0 / 1
Регистрация: 27.10.2013
Сообщений: 44
14.07.2014, 18:16  [ТС] 13
спасибо буду тестить
0
14.07.2014, 18:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2014, 18:16
Помогаю со студенческими работами здесь

Как можно продиагностировать DNS запросы, включая обращения к кэшу, и сами запросы от DNS клиента к серверу?
Добрый день! Подскажите пожалуйста, каким образом можно в операционной системе MS Windows 7...

как оптимизировать
есть задача на рекурсию, решенная на двух языках программирования: Visual C++ и Visual C#. C++:...

Как оптимизировать?
Прохожу (acmp . ru). Мне выдает при тестах Time Limit Exceed. Как оптимизировать программу? ...

PictureBox, как убрать задержку, как оптимизировать код?
Добрый день! Я не программист, и далек от программирования, но появилась задача и я решил ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru