
Konstantin
24.11.2017
15:47:23
Ребят, привет)
Какой индекс посоветуете повесить на timestamp колонку, чтобы использовался в запросах с where year(RecordTimestamp) = 2014, например?

lost
24.11.2017
15:49:39
Никакой
Если ты оборачиваешь индексируемую колонку в функцию индекс работать не будет

Konstantin
24.11.2017
15:50:43
Не знал, спасибо

Google

Аггей
24.11.2017
15:53:11
Mysql к сожалению не умеет функциональных индексов

lost
24.11.2017
15:53:39
Придется писать запросы типа where dt between 20140101 and 20140101 + interval 1 year - interval 1 second

?
24.11.2017
15:54:10

Аггей
24.11.2017
15:54:16
Умеет

?
24.11.2017
15:54:22
круто

lost
24.11.2017
15:54:27

?
24.11.2017
15:54:49

lost
24.11.2017
15:55:26
Хотя если у вас возникают такие вопросы
Я думаю особой разницы вы не почувствуете

Аггей
24.11.2017
16:00:16
Postgres несколько строже к приведению типов... Это может быть больно поначалу
Ну и вообще он строже к group by тому же

Alexey
24.11.2017
17:35:16
уже не строже. постгрес уже тупее чем mysql в плане group by
и функциональные индексы уже 2 года как есть, хоть и через виртуальные колонки. но у такого подхода как водится есть не только минусы, но и плюсы

Google

Pavel
24.11.2017
19:09:15
Какие плюсы?

Аггей
24.11.2017
21:10:25

lost
24.11.2017
22:12:21

Pavel
24.11.2017
22:13:37
Это как?

lost
24.11.2017
22:14:01
Она будет вычисляться на лету

Pavel
24.11.2017
22:14:35
Как такое возможно? Если функциональный индекс сформирован, его надо куда-то на диск записать, иначе как по нему искать быстро?

lost
24.11.2017
22:14:49
Индекс хранится
А колонка нет)

nietzschebrod
24.11.2017
22:15:09
эммм

Pavel
24.11.2017
22:15:23
Ну так и в постгресе. Вопрос то в чем такой подход лучше чем подход потсгреса
Какие плюсы

lost
24.11.2017
22:24:05
Есть плюс вообще подхода мускуля к работе с индексами, нет усиления записи как в посгре, но оно ко всем индексам относится, не только к функциональным

Alexey
25.11.2017
05:17:43
Какие плюсы?
плюсы в том, что виртуальные колонки можно использовать для разных кейсов, не только для создания функциональных индексов. И там, где в Oracle, MSSQL и MySQL можно создать хранимую или виртуальную вычисляемую колонку, в постгресе нужно что-то колхозить в зависимости от ситуации. И при миграции с других СУБД тоже
вспомнил ещё один случай, где group by в mysql умнее, чем в постгрес: loose index scan постгрес не умеет, хотя пользователи просят уже лет 10. в mysql появился в 2005 году

Аггей
25.11.2017
08:56:51
Ну вот для меня было не очевидным указывать в group by 2 поля из 5
Хотя возможно, там да - были вычисляемые поля

Alexey
25.11.2017
09:03:54
Это вообще не про вычисляемые поля
Это про то, что с 1999 года SQL стандарт допускает запросы вида select id, k group by id, если есть уникальный индекс по id
потому что значение остальных колонок в каждой группе уникально

Google

Аггей
25.11.2017
11:22:04
В том примере было несколько иное. Про опцию ONLY_FULL_GROUP_BY было...
Если найду - скину пример

Alexey
25.11.2017
11:33:18
Это был простейший пример. Понятно, что зависимости могут быть менее тривиальные. И вот тут постгрес начинает лажать

Pavel
25.11.2017
11:33:31
Так что указывать все колонки в group by это хорошо :) и правильно что постгрес так действовал всегда. Хоть иногда это и кажется излишним.

Аггей
25.11.2017
11:42:21
Был интересный случай. На аутсорс отдавали 2 проекта. Один php+mysql, второй php+oracle. С первым команда справилась на ура (сразу видно знакомая связка), а вот со вторым были проблемы... То union all между строкой и числом не шёл, то группировки не работали

Alexey
25.11.2017
12:54:48
А до этого приходилось колхозить ненужные агрегаты там, где они были не нужны

Pavel
25.11.2017
12:57:38
Э да, я имею в виду просто тупое перечисление всего без анализа всяких зависимостей, я это еще в 9.3 делал

Alexey
25.11.2017
13:22:20
Ну вот анализ зависимостей в постгресе туповат. И до сих пор приходится колхозить

?
25.11.2017
13:23:53
а еще вродь с транзакциями чет не лучше чем в mysql

Dmitry
25.11.2017
13:24:38

Аггей
25.11.2017
13:35:10
Они работают ) и даже неплохо (в плане стоимости), но различия с mysql есть.
Вообще, я вижу, что mysql в дефолтные настройки с каждой версией тянет все больше "ограничений". Все ближе к pg, oracle

Dmitry
25.11.2017
13:37:08
если честно - не могу представить чтобы они работали хуже чем в проприетарном продукте
другое дело что mysql позволяет самому себе выстрелить в ногу

Аггей
25.11.2017
13:39:43
Вот для начинающих разработчиков использование mysql я бы крайне не рекомендовал. Приучает к таким "вольностям"

Dmitry
25.11.2017
13:41:53
да, он очень дружелюбен и можно плохих привычек нахвататься

?
25.11.2017
13:50:29

Google

Pavel
25.11.2017
13:51:52
Например можно вставлять строку длиннее чем позволяет схема и оно молча проглотит
В 5.7 все стало сильно лучше

?
25.11.2017
13:53:33
Ну вот, а что не стало лучше?

Pavel
25.11.2017
13:54:35
Но до этого прям кошмар, я разгребаю легаси и там куча кривых данных, в датах 0000-00-00 00:00:00, строки обрезаные, групировки по неправильным колонкам и т.д.

Dmitry
25.11.2017
13:55:51
возможность вручную(!) указать значение cost

Аггей
25.11.2017
13:57:10

Dmitry
25.11.2017
13:58:17
прямо в таблице в схема mysq.*
поставил ssd вместо обычных - можешь "подкрутить" значение i/o cost для оптимизатора
engine_cost и server_cost таблички

Андрей
27.11.2017
05:52:14
Привет всем как можно закинуть api на сайт???

Yaroslav
27.11.2017
05:53:41
Читай, что такое api

Konstantin
27.11.2017
12:33:53
Ребят, вопрос ламерский, коенчно, но не могу допереть, может кто мне подскажет. Суть в чем, необходимо выбрать несколько записей из таблицы, через "in".
where column_1 in (..) AND column_2 in (..). Сложность в том, что поля дублируются. Можно ли как-то указать соответствие первого элемента в in - первому элементу во втором in.
Ибо выборка работает некорректно.
Заранее спасибо

Alexey
27.11.2017
12:36:27
не совсем ясно, о чём речь, но предполагаю, что нужна конструкция where (column_1, column_2) in ((c1, c2), (c3, c4), ...)

Konstantin
27.11.2017
12:39:34
Так я еще не пробовал. Если спасет ситуацию - огромнейший респект и благодарность. Сейчас тарйну
То ли я дебил, то ли лыжи не едут
Выдавало ошибки, взял в скобки, запрос отрабатывает, но нчиего не находит, но ведь, конструкция правильная:
(pf.`virtuemart_custom_id`, pf.`customfield_value`) IN (("35","37"),("стальной","16"))
?
соответствие полей указано верно, дважды проверил. Ничего не возвращает, увы, в чем может быть корень проблемы?

Alexey
27.11.2017
12:56:15
а where pf.virtuemart_custom_id = "35" and pf.customfield_value = "37" что-нибудь возвращает? подозреваю, что требуется на самом деле не это

Konstantin
27.11.2017
12:58:13
Нет, не возвращало, ну и не возвращает. Проблема в том, что это Виртумартовский модуль Джумлы, править который хоть немного в этом запросе - переписывать его структуру в целом.
Запрос работает в цикле
Когда он один - отрабатывает корректно, но что бы совместить их - что нужно сделать - ума не приложу.
Если where cn_1 in () and cn_2 in () - как бы все окей. Но возвращает значений больше, чем хотелось бы

Google

Konstantin
27.11.2017
13:00:01
Ибо соответствием первого со вторым даже и не пахнет

Alexey
27.11.2017
13:01:35
а какое соответствие нужно?

Konstantin
27.11.2017
13:02:33
По факту,
35 - стальной
37 - 16
etc
Ага, прошу прощения. Видать в Сессиях что-то сохранилось, или запрос был только по одному "in", но если их сопоставить - выводит опять таки нчиего. За дезинформацию прошу прощения

Alexey
27.11.2017
13:04:07
но тогда (("35","стальной"),("37","16"))?

Konstantin
27.11.2017
13:04:40
Сейчас попробую
Что-то есть, секунду
Вот к сожалению, все, да не все
Выводит два товара, в моем случае. У одного соответствие по двум параметрам, у дргуого - лишь по одному
А нужно, что бы было соответствие по двум, если они указаны.. Короче говоря, обыкновенная фильтрация по параметрам. ТО есть человек выбирает один парметр - ему выводится несколько товаров, а потом подставляется данный скъюэль, служащий для объединения параметров поиска
Но на данный момент оно рабоатет как "OR", а хотелось бы, что бы как "AND"

Alexey
27.11.2017
13:53:35
я бы для начала попробовал словами сформулировать критерий для выборки записей. потому что пока ничего не понятно. мне по крайней мере

Konstantin
27.11.2017
13:59:23
Ну смотрите. Как рабоатет фильтрация в любом из нормальных магазинов - человек выбирает один парааметр фильтрации, к примеру - цвет: красный. Соответственно выводятся все товары красного цвета, если же он параллельно выбирает размер, предположим пятый - то выборка всех товаров, у которых есть красный цвет и пятый размер. Собственно, нужно сделать тоже самое. Учитывая то, что это Вирутмарт, в котором запрос пишется вовсе не по людски, или же я просто слишком глуп для этого - то проще править сам sql. Изанчально все было просто если после выбора одного параметра фильтрации был выбрал следующий, то подставлялся следующий. А первый попросту улетучивался. Могу предоставить сам файл, в котором происходит все веселье, если это как-то улучшит ситуацию


Alexey
27.11.2017
20:18:35
Ну смотрите. Как рабоатет фильтрация в любом из нормальных магазинов - человек выбирает один парааметр фильтрации, к примеру - цвет: красный. Соответственно выводятся все товары красного цвета, если же он параллельно выбирает размер, предположим пятый - то выборка всех товаров, у которых есть красный цвет и пятый размер. Собственно, нужно сделать тоже самое. Учитывая то, что это Вирутмарт, в котором запрос пишется вовсе не по людски, или же я просто слишком глуп для этого - то проще править сам sql. Изанчально все было просто если после выбора одного параметра фильтрации был выбрал следующий, то подставлялся следующий. А первый попросту улетучивался. Могу предоставить сам файл, в котором происходит все веселье, если это как-то улучшит ситуацию
я понял. это ж key-value, он же schemaless, он же eav. если я правильно понимаю исходник, в virtuemart это сделано самым тупым способом. я могу накидать ссылок, как это делать правильно, но вряд ли вам это поможет, потому что требует другой организации данных
а в такой модели, как в virtuemart это только джойн, джойн, кладбище, боль


Konstantin
27.11.2017
20:33:06
Я, конечно, знаю, что программист из меня не ахти, но рад услышать, что код изначально был не очень, спасибо. Голвоу посетило немного другое решение, на самом деле. Коенчно, править тот цикл и вообще пхп в данном файле - так себе идея, но можно написать свой цикл, в котором написать свой sql, который будет выводить необходимые значения, в зависимости от выбора фильтра, а в само по себе $where ='..' вставить айдишники, котоыре я получу в результате сделанного мной цикла. Еще раз спасибо, и прошу прощения за потраченное время
Проще говоря, получаю айди, а после "where product id in (74,76, etc)"
Как по мне, даже не сильно костыль, хотя может всякие гуру меня камнями закидают