Size: a a a

2020 July 23

OM

Oleg Makarikhin in ru_mysql
дежавю
источник

MO

Maxat Oralbaev in ru_mysql
я подезреваю что то ни так с таском
источник

A

Alexander in ru_mysql
Vlad
STOP SLAVE SQL_THREAD:
ага, спасибо!
источник

OM

Oleg Makarikhin in ru_mysql
Maxat Oralbaev
CREATE TABLE IF NOT EXISTS docs (
 id int(6) unsigned NOT NULL,
 p1 varchar(10) NOT NULL,
 p2 varchar(10) NOT NULL,
 p3 varchar(10) NOT NULL,
 p4 varchar(10) NOT NULL,
 p5 varchar(10) NOT NULL,

 PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;
INSERT INTO docs (id, p1, p2,p3,p4,p5) VALUES
 ('1', '2', '3', '5', '1', '9'),
 ('2', '1', '2', '9', '6', '4'),
 ('3', '3', '3', '2','1', '9'),
 ('4', '2', '6', '1', '7', '8'),
 ('5', '3', '3', '1', '2', '7'),
 ('6', '3', '2', '1', '8', '3'),
 ('7', '1', '4', '2', '3', '2'),
 ('8', '5', '9', '7', '4', '1');
а не, там был другой чувак.
а что это за курс такой, интересно
источник

MO

Maxat Oralbaev in ru_mysql
это тестовый задача
источник

OM

Oleg Makarikhin in ru_mysql
собеседование на работу чтоли?
источник

MO

Maxat Oralbaev in ru_mysql
ага
источник

MO

Maxat Oralbaev in ru_mysql
я просто хотел узнать что в задаче есть логический уловка или оно специално так дано
источник

OM

Oleg Makarikhin in ru_mysql
короче  я часто встречал в проде решение
... where ( p1 = %p1  or %p1 is null ) and ( p2 = %p2  or %p2 is null ) and ..
и у меня подгорало, потому что для такого общего условия опимизатору сложно выбрать индексы
источник

MO

Maxat Oralbaev in ru_mysql
понятно почему так оказваеться в реале тоже встречаеться такое
источник

OM

Oleg Makarikhin in ru_mysql
но это не единственное, еще через
where p1=coalesce(%p1,p1) and ...
что тоже не лучше с точки зрения оптимизатора
источник

MO

Maxat Oralbaev in ru_mysql
спасибо за отклик )))
источник

A

Alexander in ru_mysql
Oleg Makarikhin
короче  я часто встречал в проде решение
... where ( p1 = %p1  or %p1 is null ) and ( p2 = %p2  or %p2 is null ) and ..
и у меня подгорало, потому что для такого общего условия опимизатору сложно выбрать индексы
так делаю постоянно с датой, например, а что не так с оптимизатором если по этому полю индекс?
источник

OM

Oleg Makarikhin in ru_mysql
оптиимзатор должен знать значение параметра чтобы отсечь невыгодный индекс.
источник

A

Alexander in ru_mysql
а какие варианты тогда, задача простая: найти строчку, timestamp которой больше текущего или null, т.е. если я null заменю, например, 3000 годом, будет эффективнее?
источник

OM

Oleg Makarikhin in ru_mysql
я точно не знаю. в каждом случае по-разному. может у тебя основная масса строк отсекается другим индексом.
но вот конкретный пример выше, похоже на фасетный поиск - предположим у меня есть различные комбинации индексов по p1,p2..p5 полям, какой индекс выбрать для запроса? - наверное лучший - те у которых параметры не null.
источник

A

Alexander in ru_mysql
Alexander
Коллеги, собираюсь переместить одну из таблиц кластера на одной из нод в отдельную локацию, в кластер активно пишутся данные, в том числе и в эту таблицу, хочу черзе прямое перемещение тейбл-спейса, какой лок надо поставить, и можно ли это сделать отьдельно на отдельной ноде?  думал через: FLUSH TABLES table_name FOR EXPORT;-->mv-->DROP TABLE table_name;-->CREATE TABLE table_name`-->ALTER TABLE `table_name DISCARD TABLESPACE; -->ALTER TABLE table_name IMPORT TABLESPACE;
так что, ни кто не знает, можно ли дропнуть и пересоздать залоченную таблицу, чтоб не потерять накопившиеся данные?
источник

A

Alexander in ru_mysql
Oleg Makarikhin
я точно не знаю. в каждом случае по-разному. может у тебя основная масса строк отсекается другим индексом.
но вот конкретный пример выше, похоже на фасетный поиск - предположим у меня есть различные комбинации индексов по p1,p2..p5 полям, какой индекс выбрать для запроса? - наверное лучший - те у которых параметры не null.
ну, да, пример какой то странный, не знаю как его можно в проде применить...
источник

E

Envy in ru_mysql
Блин, я разобрался как считать разницу в столбцах, сейчас делаю вот так это:
SELECT tstamp,
      LEAD(tstamp) OVER (order by tstamp)                                                                         as next,
      IF((LEAD(tstamp) OVER (order by tstamp) - tstamp) IS NULL, 0,
         LEAD(tstamp) OVER (order by tstamp) - tstamp)                                                            as time
FROM reports INNER JOIN sessions s on reports.session_id = s.id;

Но если в IF вместо 0 добавить
MAX(s.end) - (SELECT tstamp FROM reports ORDER BY tstamp DESC LIMIT 1)

То на выходе я получаю лишь одну строку, кто-нибудь может подсказать мне, что я делаю не так?
источник

E

Envy in ru_mysql
Я добавил GROUP BY id в конце, и поведение теперь адекватное, но правильно ли  я сделал?
источник