Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Порядок логических выражений
 
 автор: Ziq   (16.06.2006 в 21:30)   письмо автору
 
 

Объясните есть ли разница в порядке логических выражений? Объясню на примере


if(false and in_array("hhh",$arr))
и
if(in_array("hhh",$arr) and false)

что быстрее

Как дела обстоят в MySQL?

Заранее всем ОГРОМНОЕ спасибо.

   
 
 автор: valenok   (16.06.2006 в 21:37)   письмо автору
 
   для: Ziq   (16.06.2006 в 21:30)
 

Не должно быть...
Есть разница между 2*5 и 5*2. а в мускуле есть такая разница?

   
 
 автор: Ziq   (16.06.2006 в 22:07)   письмо автору
 
   для: valenok   (16.06.2006 в 21:37)
 

Не совсем правильно приведен пример. Тут лучше было бы привести такой пример 0 * (100000 + 2000000). По правилам первым надо вычислить выражение в скобках, но человек то понимает, что можно не вычислять, а сразу дать ответ 0. Так и тут при условии AND дальше можно не вычислять, потому что первое выражение false. Думаю логика понятна. Но есть ли такая разница в PHP и MySQL?

   
 
 автор: valenok   (16.06.2006 в 22:20)   письмо автору
 
   для: Ziq   (16.06.2006 в 22:07)
 

Не думаю что php понимает.
А так разницы нету - результат всегда тот же.

   
 
 автор: Ziq   (16.06.2006 в 22:31)   письмо автору
 
   для: valenok   (16.06.2006 в 22:20)
 

Результат то понятно что тот же, все упирается в скорость.

   
 
 автор: valenok   (16.06.2006 в 23:13)   письмо автору
 
   для: Ziq   (16.06.2006 в 22:31)
 

Ну проверил бы давно...
Скажешь потом что вышло.
И запусти скрипт хотябы несколько раз

   
 
 автор: cheops   (17.06.2006 в 01:13)   письмо автору
 
   для: Ziq   (16.06.2006 в 21:30)
 

Быстрее конечно первый вариант, так как in_array() в этом случае даже не будет вычиляться - это известный программистский приём, горячо любимый Perl-овцами or die() - из этого же разряда. Однако заботится об этом не следует - сейчас интерпретаторы, а особенно компиляторы стараются распознать такую ситуацию и ускорить вычисления за счёт такого приёма. В MySQL дела обстоят ещё хитрее - оптимизатор даже пытается переиначить порядок объединения, чтобы уменьшить объём вычилений - если порыться в системных переменных можно даже откопать парочку, влияющих на поведение оптимизатора при поиске оптимальных решений.

   
 
 автор: Ziq   (17.06.2006 в 19:44)   письмо автору
 
   для: cheops   (17.06.2006 в 01:13)
 

Ведь это по идеи не правильно, потому что замедляет скорость выполнения запроса. Не лучше бы было оставить эту заботу программисту. Как Вы считаете?

   
 
 автор: cheops   (17.06.2006 в 22:29)   письмо автору
 
   для: Ziq   (17.06.2006 в 19:44)
 

В общем нет... работа оптимизатора проходит достаточно быстро, даже если запрос очень громоздкий (ведь его всё равно нужно интерпретировать, а оптимизатор очень здорого интегрирован с интерпретатором). Кроме того оптимизатор не принимает никаких корректировок в спорных вопросах, т.е. когда он "не уверен", что его действия заведомо приведут к ускорению вычислений.

   
 
 автор: Ziq   (17.06.2006 в 22:32)   письмо автору
 
   для: cheops   (17.06.2006 в 22:29)
 

Большое спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования