Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скорость запроса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ams
Отправлено: 14 Августа, 2011 - 20:22:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




Есть элемент, у него например есть id его состовляющих (с другой таблицы). Их больше 100.
Делаю запрос, вытаскую главный элемент, получаю id и в цикле делаю запрос: select * from `table` where `id`= $v ... И так получается оочень много запросов Улыбка Посчитал сумму выполнения этих всег запросов... Потом попробывал через in, без цикла: select * from `table` where id in ($id). Получается 1 запрос, но время выполнения дольше, чем много селектов в цикле. Как можно ускорить запрос?)
 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Августа, 2011 - 20:31:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Дайте структуру таблиц
 
 Top
ams
Отправлено: 14 Августа, 2011 - 20:44:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




1 таблица, которая первая)

id, link, name_ru, name_en, id_item (в этом поле через запятую перечислены id с другой таблицы)

2-ая таблица
id_item(по этому полю выбираю), name_ru, name_en, chanse .... много полей что в той, что в той, ну основные перечислил
 
 Top
Champion Супермодератор
Отправлено: 14 Августа, 2011 - 21:11:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




ams пишет:
id_item (в этом поле через запятую перечислены id с другой таблицы)
Ого. Неужели это чем-то лучше/проще/эффективнее традиционных методов?

А по делу - по-моему, описывая то, что у вас происходит вы сильно исказили описание. Лучше всё-таки оба варианта маленького кусочка кода, и структуру таблицы в виде DDL и с индексами.
 
 Top
ams
Отправлено: 14 Августа, 2011 - 22:03:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




Champion пишет:
структуру таблицы в виде DDL и с индексами.

Вот тут я кроме чучуть знакомых слов ничего не понял Не понял

Код: в метод получаю текст ссылки($link). Вытавкую с 1 таблицы запись, в который `link` = $link. В полученном массиве есть поле, в котором через запятую перечислены id предметов, которые например входят тот первый вытащеный по ссылке элемент. Пробывал explode и потом в цикле делать мноого запросов, посчитал общую сумму выполнения (select * from `table1` WHERE id_item = $var).

Другой способ: Ничем не страдая сразу запрос: select * from `table1` where id_item in($varr), где $varr - это поле, в котором много чисел через запятую. И этот запрос оказался дольше чем много простых селектов. Ну а насчет традиционных методов, можно пример к моему случаю?)

пс. Полей до 20 в таблице, я может понял за какой вы способ мне говорили, поэтому и не делал им. А насчет * в селеккте - быстрее на форуме тут писать, в запросе перечисляются нужные поля
(Добавление)
Champion, спасибо кстате за эти индексы. Както не доходил к ним и не читал за них, телал всегда только 1. А щас почитал и сделал - получился 1 запрос почти в 2 раза быстрее. Еще раз спс Улыбка
 
 Top
DeepVarvar Супермодератор
Отправлено: 14 Августа, 2011 - 22:46:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ams жоско... Однозначно перделывать надо..
 
 Top
ams
Отправлено: 14 Августа, 2011 - 22:56:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




Не я создавал бд, она оочень большая и на половину вернаа (много видил аналогичной структуры) и очень тяжёлая. Времени переделывать нет, так что мучаюсь с чем есть Улыбка
 
 Top
biperch
Отправлено: 14 Августа, 2011 - 23:07:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




если вашу задачу можно реализовать одним или несколькими запросами, то лучше сделать это так.
Ибо каждое обращение к базе занимает время.
Лучше сделать большой вложенный запрос чем в цыкле РНР по одному запросу за цыкл
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB