parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Case 1: Если parameter_id обозримо конечен, то попробуйте представить их набор "в одну строку" как число (битовыми масками)

andylars 23.11.2015 22:24 / 24.11.2015 00:34

На "не сложный" случай, есть тип поля SET для MySQL вроде бы допускает до 64-х значений на одно такое поле.
Работает быстро т.к. это битовые маски.
т.е. в "одной строке" в колонке типа SET могут быть
сразу 64 разных значения или любой их набор.

Таким образом,
id	parameter_id
1	1,2,5,8,19,32
2	1
3	8,9,54,12
Работать это будет очень быстро и одновременно легко.


Вообще можно и пролонгировать кол-во параметров
больше 64, либо "на коленках" - введя диапазоны
и добавив еще допустим 10 колонок типа SET
получив 640 уникальных параметров одновременно в одной строке.

А можно и самому на коленке битовые маски собрать.
За примером ходить не надо, permission в unix
rwx-rwx-rwx - как раз и вычисляет "включенные" и "выключенные"
опции через битовые маски.

где конечная уникальная последовательность опций, есть уникальное
число,
rwx rwx rwx = 777, rw- --- --- = 600 (в Octet)
или 111 111 111, 110 000 000 в Binary соответственно

математика этого довольно простая, и ее можно сделать самому.

И если набор опций обозримо конечен (т.е. 1 бит уникальную опцию), то выборка последовательности включенных опций должна быть обозрима быстрее и компактнее в хранении.

Тут надо эксперементировать.
SET явно использует 8-байтовый BIGINT - поэтому и 64 значения (бита)

Будет ли удобнее/быстрее сделать несколько SET-ов,
или сконвертировать свое большое число в CHAR(fixed)
и самому считать перед SELECT/INSERT - надо пробовать.

Бенчмарки например на CHAR(36) показали, что они работают
быстрее чем CHAR(36) c INDEX
# это показал бенчмарк, как быстрее хранить и работать с UUID