@prophp7

Страница 559 из 1387
?
23.08.2017
09:11:07
ИМХО он больше на питон похож.
Например https://gist.github.com/bentranter/95d6fc63d990fb6b1092

f4rt~
23.08.2017
09:15:14
F01134H
23.08.2017
09:16:22
ох уж этот Problem Exists Between Keyboard And Chair

Kirill
23.08.2017
09:30:21
EXPLAIN EXTENDED SELECT DATE_FORMAT(created, '%Y-%m-%d') AS `date`, COUNT(*) AS `clicks` FROM clicks WHERE `partner_id` = 'afftiny' AND `created` BETWEEN '2017-08-13' AND '2017-08-24' GROUP BY `date` ORDER BY `clicks` DESC почему при таком запросе на таблице с 2.3кк данных время выполнения 4-7 секунд ? эксплейн и схема внутри https://pastebin.com/CiDQpUke

Google
Kirill
23.08.2017
09:30:45
mysql 5.5.50

в mariadb всё ок

Sergey
23.08.2017
09:31:12
> Using where; Using temporary; Using filesort

Kirill
23.08.2017
09:31:30
индекс есть, как исправить?

Sergey
23.08.2017
09:31:38
индекс на что?)

Kirill
23.08.2017
09:32:03
на оба поля, partner_id, created

Sergey
23.08.2017
09:32:44
clicks

Ильдар
23.08.2017
09:33:02
Вот если бы ты все даты засунул в IN, было бы лучше

И, может попробовать сделать составной индекс (partner_id, created, date, clicks)

на оба поля, partner_id, created
Там еще order by и group by

Dmitro
23.08.2017
09:34:38
пробуй методом исключения. убери count(*), потом group by

Sergey
23.08.2017
09:35:29
пробуй методом исключения. убери count(*), потом group by
count тут не особо причем. Больше смущает group by и created beetween`.

Google
Art
23.08.2017
09:36:06
Норм для тектовой строки которая поместится в mysql а далее вывод в формате json где нужно отдавать как единую строку без \r\n. Или есть более элегантный подход к фильтрации параметров? // для этого: secureArrParams([$_POST['p'], $_POST['p2'], $_POST['p3']]) private function secureArrParams($arr) { $ln = count($arr); while($ln--) { $arr[$ln] = trim($arr[$ln]); $arr[$ln] = nl2br($arr[$ln]); $arr[$ln] = htmlspecialchars($arr[$ln]); $arr[$ln] = addslashes($arr[$ln]); $arr[$ln] = str_replace("\r\n", "", $arr[$ln]) } return $arr; }

Dmitro
23.08.2017
09:36:07
count() на innodb довольно медленный. хотя на 2.3к не должно быть проблемой

Sergey
23.08.2017
09:36:25
2.3kk насколько я понял

и тут проблема именно в фулскан

Kirill
23.08.2017
09:36:46
2.3kk

Sergey
23.08.2017
09:36:48
и потом еще и сортировка результата

Kirill
23.08.2017
09:37:12
сортировка не обязательна, просто был запрос, где только с сортировкой начинал исопльзоаться индекс

Art
23.08.2017
09:37:49
так потом и в pdo через prepare

->execute([p1, p2])

Kirill
23.08.2017
09:38:11
вот как раз этот запрос SELECT `phone`, COUNT(*) AS subscriptions FROM `users` WHERE `status` IN('active', 'finished') AND `created` BETWEEN '2017-08-19 00:00:00' AND '2017-08-21 00:00:00' GROUP BY phone HAVING subscriptions >= 3 ORDER BY subscriptions DESC

Art
23.08.2017
09:39:40
я в ручную json собираю, отправляю заголовок и сам echo json

Oscar
23.08.2017
09:45:10
видимо у тебя много свободного времени)

Art
23.08.2017
09:45:12
Норм для тектовой строки которая поместится в mysql а далее вывод в формате json где нужно отдавать как единую строку без \r\n. Или есть более элегантный подход к фильтрации параметров? // для этого: secureArrParams([$_POST['p'], $_POST['p2'], $_POST['p3']]) private function secureArrParams($arr) { $ln = count($arr); while($ln--) { $arr[$ln] = trim($arr[$ln]); $arr[$ln] = nl2br($arr[$ln]); $arr[$ln] = htmlspecialchars($arr[$ln]); $arr[$ln] = addslashes($arr[$ln]); $arr[$ln] = str_replace("\r\n", "", $arr[$ln]) } return $arr; }

Kirill
23.08.2017
09:50:20
SELECT COUNT(*) FROM clicks WHERE `partner_id` = 'afftiny' AND `created` BETWEEN '2017-08-13' AND '2017-08-24' вобщем этот запрос работает столькоже долго, значсит проблема в between, нужно иначе даты фильтровать

хз как -_-

Google
Kirill
23.08.2017
09:51:47
без between работает моментально

Андрэ
23.08.2017
09:52:17
если промежутки дат небольшие, может и правда where in?

Kirill
23.08.2017
09:54:09
я филтрую по дате, а в таблице у меня datetime

для in нужно ведь полное совпадение

мб like тогда ?)

Magnus
23.08.2017
09:54:45
А от datetime в сторону timestamp избавиться нельзя?

Kirill
23.08.2017
09:55:25
нет времени на это скорее

рефакторинг не уместен, т.к. проект и так под снос давно пора

Magnus
23.08.2017
09:56:06
что explain пишет?

Mikhail
23.08.2017
09:56:22
А разница? Как вариант сделать ещё одно поле date от created

Kirill
23.08.2017
09:56:39
explain на счётчик с between?

Mikhail
23.08.2017
09:56:45
Я про datetime и timestamp

Art
23.08.2017
09:56:53
а сейчас в mysql что популярно, процедуры вызывать или из приложения запросы слать?

Mikhail
23.08.2017
09:57:20
Процедуры зло нетестируемое

Magnus
23.08.2017
09:57:23
Art
23.08.2017
09:57:31
мне тоже лично обычные запросы удобно

Kirill
23.08.2017
09:57:35
https://pastebin.com/CiDQpUke

Sergey
23.08.2017
09:57:36
а сейчас в mysql что популярно, процедуры вызывать или из приложения запросы слать?
если ты dba - то процедуры популярнее. если ты разработчик приложения - то популярнее из приложения)

Mikhail
23.08.2017
09:58:13
Заодно может кто расскажет как тестируют процедуры

Art
23.08.2017
09:58:23
а сложные запросы можно через orm составлять? или там только crud?

Google
Яўген
23.08.2017
09:59:09
процедуры плохи тем, что шардинг уже не реализовать без большого оверхеда

Яўген
23.08.2017
09:59:34
по поводу запроса: попробуй составной индекс на partner_id, created поставить

Sergey
23.08.2017
09:59:41
шардинг это как последнее что стоит делать

когда уже все остальное перепробовал

Яўген
23.08.2017
10:00:15
нет, там 2 отдельных

Art
23.08.2017
10:00:18
и кажется процедуры по-моему не экспортируются в одном в файле с данными

не очень удобно

Яўген
23.08.2017
10:01:15
но индекс для фильтра поможет, filesort и temporary останутся

Magnus
23.08.2017
10:01:50
https://pastebin.com/CiDQpUke
Накакого криминала не вижу. Я бы создал поле с timestamp создания записи, старые бы обновил из created и делал выборку по нему. По идее, должно быть быстрее

Sergey
23.08.2017
10:01:52
и кажется процедуры по-моему не экспортируются в одном в файле с данными
это не проблема, это как изменения схемы надо хэндлить

ну то есть если ты выбрал процедуры то работать можно и есть масса инструментов

просто это "по другому"

нет, там 2 отдельных
тогда понятно, ибо mysql до 5.6 вроде как не умеет в merge index-ы

как же я люблю postgres)

Андрэ
23.08.2017
10:04:26
как же я люблю postgres)
И сразу вопрос, что-то типа Sequel Pro есть под постгресс? Или чем пользуешься?

Sergey
23.08.2017
10:05:04
SqlYog есть)

Google
Андрэ
23.08.2017
10:05:19
psql
это cli?

Sergey
23.08.2017
10:05:28
да

Андрэ
23.08.2017
10:05:36
ну так то да)

Яўген
23.08.2017
10:05:45
деплой хранимых процедур происходит гораздо сложнее

Sergey
23.08.2017
10:05:48
ну а мне больше ничего и не надо особо.

Яўген
23.08.2017
10:05:52
там гитом не воспользуешься

надо дропать сначала, и только потом новую создавать

Sergey
23.08.2017
10:06:05
там гитом не воспользуешься
может просто ты не изучал этот вопрос?

Андрэ
23.08.2017
10:06:07
SqlYog есть)
оно MySQL же судя по сайту? не?

Kirill
23.08.2017
10:06:44
составной индекс начальный запрос ускорил, теперь 2 секунды работает

Sergey
23.08.2017
10:06:46
надо дропать сначала, и только потом новую создавать
и как это коррелируется с "в git не похранить"?

Яўген
23.08.2017
10:06:51
было время, когда писал на дельфи, поэтому делали логику приложения в основном на хранимых процедурах. Пытался потом переносить это на php, кучу проблем слоивл

Sergey
23.08.2017
10:06:51
есть масса инструментов упрощающих это добро

Mikhail
23.08.2017
10:06:56
ну то есть если ты выбрал процедуры то работать можно и есть масса инструментов
У нас есть легаси процедуры, и рефакторить возможности нет пока, как их можно дебажить? Есть ли какие нибудь инструменты. (Mysql)

Mikhail
23.08.2017
10:07:22
)

Sergey
23.08.2017
10:07:23
я процедуры принципиально не юзаю

Mikhail
23.08.2017
10:07:31
Я тоже)

Яўген
23.08.2017
10:08:18
Patrik
23.08.2017
10:08:36
составной индекс начальный запрос ускорил, теперь 2 секунды работает
можно еще попробовать сделать NOT NULL колонки которые этого не требуют, cteated например, там точно он нужен?

Kirill
23.08.2017
10:09:48
@masterjus было 4-7 секунд, сейчас добавилось исопльзования индекса

Яўген
23.08.2017
10:10:32
filesort и temporary table останутся, этого не избежать при группировке и сортировке

Страница 559 из 1387