fgrep
:$ cat /tmp/file1.txt
aaa
bbb
ccc
$ cat /tmp/file2.txt
bbb
123
aaa
$ fgrep -f /tmp/file1.txt /tmp/file2.txt
bbb
aaa
$output = shell_exec('fgrep -f /tmp/file1.txt /tmp/file2.txt > /tmp/dups.txt');
$ sort -u /tmp/file1.txt /tmp/file2.txt
123
aaa
bbb
ccc
$output = shell_exec('sort -u /tmp/file1.txt /tmp/file2.txt > /tmp/dups.txt');
Есть ли какие-то диагностические инструменты на php?Да. Называются термином APM. Устанавливается и интегрируется агент APM и тот собирает необходимые метрики. Для некоторых APM есть веб-интерфейс и в них можно узнать на какие запросы тратится много времени или других ресурсов. Без APM можно только гадать.
при перестроении индексов запрос начинает заметно тормозитьЯ не уверен в этом. Как это было замерено?
Один из важных элементов -- это данные об актуальном балансе средств клиента, которые хранятся в поле balance в таблице clients. По данному полю происходит постоянная нагрузка параллельными запросов на получение и изменение его текущего значения.Поле balance можно вынести в отдельную таблицу, тогда не будет блокироваться таблица clients. Сейчас есть много операций чтения и записи в одной таблице. При отдельной таблица clients будет использоваться почти только для чтения, а таблица баланса с частой записью не будет блокировать запросы clients.
–pPassword_DBТут какой-то странный дефис.
-p 'секретно'
-p
)-h example.com
mysql -u admin_name -p 'секретно'
Суть в том, что эти строчки периодически извлекаются по 1-2шт, когда-то больше, а когда-то меньше, можно и всё сразу, не так важно.Нужно знать по какому принципу извлекают те самые строки.
create_connection_mysql_db('localhost',
а почему localhost?SELECT COUNT(`id`) AS `count` FROM `users` WHERE `name` = '$name'
SELECT 1 FROM `users` WHERE `name` = '$name' LiMIT 1
Потому что пользователей считать не надо. Достаточно получить ненулевую выборку.SHOW processlist