Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как ощутить разницу
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




Всем привет, имею фреймворк, в котором аж три варианта запроса к базе, все отличаются, но в доках не написано какой из вариантов быстрее, как нагрузить запрос что бы определить что же быстрее?


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2704
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 23 дня
Карма: 170




В большинстве случаев достаточно посмотреть EXPLAIN запросов.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




T1grOK

Спасибо, узнал еще что то новое :) Пока почитал мельком, но мне кажется это не совсем то что мне нужно.

к примеру у меня есть два вот таких вида


$phql = "SELECT c.* FROM Cars AS c ORDER BY c.name";
$cars = $manager->executeQuery($phql);

Это то же самое, что и:

$cars = Cars::find(
array(
"order" => "name"
)
);



Вот мне надо определить что же быстрее, или тут особой разницы нету?


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2704
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 23 дня
Карма: 170




Посмотреть через профайлер и сравнить.


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




T1grOK

Спасибо, все удалось. Только вот понять пока не могу, что же все таки быстрее, если я правильно понял то 1 запрос.

1 запрос

Starting 21 µs
Waiting For Query Cache Lock 6 µs
Init 4 µs
Checking Query Cache For Query 77 µs
Checking Permissions 9 µs
Opening Tables 156 µs
Init 35 µs
System Lock 8 µs
Optimizing 15 µs
Statistics 25 µs
Preparing 20 µs
Executing 9 µs
Sending Data 19 µs
End 6 µs
Query End 8 µs
Closing Tables 4 µs
Removing Tmp Table 11 µs
Closing Tables 37 µs
Freeing Items 83 µs
Cleaning Up 20 µs


2 запрос

Starting 77 µs
Checking Permissions 9 µs
Opening Tables 170 µs
Init 33 µs
System Lock 7 µs
Optimizing 15 µs
Statistics 23 µs
Preparing 19 µs
Explaining 29 µs
Query End 8 µs
Closing Tables 4 µs
Removing Tmp Table 8 µs
Closing Tables 6 µs
Freeing Items 88 µs
Cleaning Up 18 µs


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
neadekvat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Феноменально ленив
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2768
Пользователь №: 26803
На форуме: 5 лет, 8 месяцев, 27 дней
Карма: 122




Первый способ - это ручное написание запроса. Второй - через обертку. И дело в том, что обертка наверняка сгенерирует почти такой же запрос, что ты написал вручную. Таким образом, сейчас ты замеряешь скорость выполнения фактически одного и того же запроса.

Разницу здесь надо ощущать на другом уровне. Фреймворк предоставляет абстракцию, и все что находится внутри фреймворка - абстракция. Абстракцией же является и запрос на получение данных. Лишь где-то внутри фреймворка известно, что метод find обращается к базе данных. А что, если модель будет наследоваться не от какого-нибудь ActiveRecord? Например, в какой-то момент все объекты Cars переедут из реляционной базы в какой-нибудь Memcache?

Так что настоятельно рекомендую, если уж взялся за ООП-фреймворк (не Yii ли?), то пиши в стиле ООП. То есть никаких чистых SQL-запросов в бизнес-логике.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




neadekvat

Спасибо за развернутый ответ, но дело в том что и первый вариант тоже вроде как обертка, если я все правильно понял из документации smile.gif

Цитата (neadekvat @ 9.01.2016 - 16:58)
не Yii ли?


Нет, Phalcon.

Ну и вообще интересует такой вопрос, стоит ли забивать голову такой экономией, или эта экономия на спичках? smile.gif


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




Когда получаю объект, через второй вариант, через вардамп вижу уже именно вот такой запрос как в первом варианте, как мне показалось то что второй вариант выступает как парсер(возможно где то ошибаюсь)

Выглядит это примерно так

$captcha = Captcha::find(["ip = '$ip'", "order" => "time DESC", "limit" => 1]);
wtf($captcha);exit;



[_pdoStatement:protected] => PDOStatement Object
(
[queryString] => SELECT `captcha`.`id`, `captcha`.`time`, `captcha`.`ip`, `captcha`.`word` FROM `captcha` WHERE `captcha`.`ip` = '127.0.0.1' ORDER BY `captcha`.`time` DESC LIMIT :APL0
)


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
neadekvat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Феноменально ленив
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2768
Пользователь №: 26803
На форуме: 5 лет, 8 месяцев, 27 дней
Карма: 122




Цитата (Wind @ 9.01.2016 - 17:09)
первый вариант тоже вроде как обертка

Разумеется. Абстракция, помним об абстракции (: Но по существу запрос вряд ли будет меняться. Подстановка параметров - да. Возможно, какие-то кавычки расставит. Но парсить и менять запрос - нет, не думаю.

Цитата (Wind @ 9.01.2016 - 17:09)
или эта экономия на спичках

Именно. Пиши, придерживаясь парадигмы, а когда начнет тупить - будешь смотреть, где и почему тупит.

Цитата (Wind @ 9.01.2016 - 17:15)
как мне показалось то что второй вариант выступает как парсер

Не понял эту мысль..
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Wind  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Местная прописка
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 721
Пользователь №: 41530
На форуме: 1 год, 5 месяцев, 9 дней
Карма: 9




neadekvat

Спасибо smile.gif


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1047
Пользователь №: 41686
На форуме: 1 год, 4 месяца
Карма: 13




Цитата (neadekvat @ 9.01.2016 - 16:58)
Так что настоятельно рекомендую, если уж взялся за ООП-фреймворк (не Yii ли?), то пиши в стиле ООП. То есть никаких чистых SQL-запросов в бизнес-логике.

И как же это сделать, когда в запросах по 4-5 джоинов, вложенные селекты и прочие штуки? Как должна выглядеть модель данных?



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
neadekvat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Феноменально ленив
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2768
Пользователь №: 26803
На форуме: 5 лет, 8 месяцев, 27 дней
Карма: 122




Ron, зависит от того, что за ORM ты используешь, очевидно. Но в общем случае джоины - это связи между моделям, которые в этой самой модели и должны прописываться, и, соответственно, ORM без особых затруднений может составить правильный запрос. (Хотя многие отказываются от джоинов в пользу отдельных, но простых SELECT запросов.)

Вложенные селекты - отдельный случай. Очевидно, если тебе нужен вложенный селект, то мы уже выходим за рамки простых моделей - сам запрос начинает содержать в себе некую бизнес-логику. Возможно, это можно описать неким конструктором запросов, возможно - переписать в код, выделив несколько простых запросов. Ситуативная штука.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11788
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 15 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 16 дней


Цитата (Ron @ 9.01.2016 - 21:14)
Как должна выглядеть модель данных?

причем здесь модель, обычно сложные запросы пишут с помощью билдера, на худой конец на "чистом" SQL, а затем маппят результат
например, работая с доктриной, мне пока что доводилось писать чистый SQL только для импорта данных в БД, и то, только ради скорости, притом что эти запросы запускаются только при новом патче (и далеко не при каждом). и тут, кстати, мне пришлось писать доп. код, из-за того, что я работал вне слоя ORM и в приложении не генерировались ивенты, на которые была завязана куча логики.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса