Вопрос сначала, информация позже.PHP несколько одновременно выбирает?
В PHP есть ли способ отправить несколько SQL-запросов одновременно, и пусть mysql обрабатывает все выбранные одновременно?
Потому что ожидание всех ответов отдельно занимает слишком много времени.
Что мне нужно для кода?
У меня есть это:
$sqlStringArray[0=>"SELECT a,b,c,d,e,f FROM T1 JOIN (SELECT x... WHERE) AS RandomJoin WHERE... ORDER BY... GROUP BY....",
1=>"SELECT x,y FROM T2 WHERE...",
2=>"SELECT random FROM randomTable WHERE...";
Я использую что-то вроде этого:
/* This is not good enough, each select could take 2 seconds */
foreach ($sqlStringArray as $key => $value) {
$mysqli->query($value);
}
Я хочу что-то вроде этого:
$resultSet = $mysqli->executeAllSelectsAtTheSameTimeAsynchronous($sqlStringArray);
(не обязательно читать ниже)
Я сора о моем английском, надеюсь, этого достаточно для понимания.
(Причина) У меня есть система контроля производительности, которая быстро растет (160 000 фильтруемых элементов, 280 счетчиков каждый, 4 записи/час каждого счетчика), около 4.300.800.000 новых записей/день.
Пользовательский интерфейс позволяет пользователям выбирать, какие счетчики они хотят, чтобы посмотреть, DateRange, формулы (например, Sum 2 счетчика, вычитать для этого другого, фильтр по регионам/имя/тип/ничего) ..
Все работает хорошо , но некоторые пользователи выбирают более 120 различных типов формул, и каждая формула будет возвращена к данным JSON, которые будут обрабатываться с помощью графических карт, которые будут отображаться в пользовательском интерфейсе, каждый выбор занимает около 2-5 секунд (я считаю, что сделал действительно отличная работа в избранной части, я не думаю, что смогу ее улучшить, потому что я не могу обобщить эти данные, когда каждый пользователь использует свои собственные формулы, и они выглядят случайным образом в сети [на самом деле выглядят только тогда, когда у них есть пользователь жалобы]).
Я хотел бы знать, есть ли какие-либо способы, которыми я могу отправить «список выбора», чтобы каждый раз обрабатывать mysql и возвращать кучу массивов.
@MyWay решил это, под некоторыми тестами (имя файла сам объясняет), я использовал одни и те же запросы во всех файлах, поэтому чем больше я запускаю, тем быстрее он не знает почему, но разница настолько велика, что никогда не бывало, по крайней мере в 8 раз быстрее.
[email protected]:/dev/shm/test/20151209$ php teste_diogo_sequential.php
Memory spike:
not real: 0.22097778320312 MiB
real: 0.25 MiB
Total execution time in seconds: 87.4132
[email protected]:/dev/shm/test/20151209$ php teste_diogo_multiquery.php
Memory spike:
not real: 0.22097778320312 MiB
real: 0.25 MiB
Total execution time in seconds: 11.1795
[email protected]:/dev/shm/test/20151209$ php teste_diogo_multiquery_JSON.php
Memory spike:
not real: 0.22097778320312 MiB
real: 0.25 MiB
Total execution time in seconds: 6.9231
[email protected]:/dev/shm/test/20151209$ php teste_diogo_sequential.php
Memory spike:
not real: 0.22097778320312 MiB
real: 0.25 MiB
Total execution time in seconds: 62.1036
Вы пробовали multi_query ? http://php.net/manual/en/mysqli.multi-query.php – Thamilan
Ой, нет, я попробую это прямо сейчас и верну вас, если вы опубликуете его как ответ, и я выберу его как ответил. @MyWay –