Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-26664

Store UUIDs in a more efficient manner

    XMLWordPrintable

    Details

      Description

      UUIDs are stored in a binary form, but not byte-swapped like in MySQL's uuid_to_bin https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid-to-bin

      The order provided by UUID_TO_BIN() is not really friendly to index prefix compression:
      it only reorders the timestamp segments, while the clock-seq and the node-ID segments are still at the end. This ruins the whole idea of prefix compression.

      Let's sort UUID in a really index-friendly order, by moving the constant part to the left and the variable part to the right.

      So for comparison purposes we'll reorder segments, but keep the byte order inside the segments (i.e. in big endian order):

      MariaDB binary UUIDv1 representation, as returned by the UUID() function:
       
        llllllll-mmmm-Vhhh-vsss-nnnnnnnnnnnn
       
      Binary sortable representation:
       
         nnnnnnnnnnnn-vsss-Vhhh-mmmm-llllllll
       
      Sign           Section               Bits   Bytes  Pos   PosBinSortable
      -------------  -------               ----   -----  ---   --------------
      llllllll       time low              32     4        0   12
      mmmm           time mid              16     2        4   10
      Vhhh           version and time hi   16     2        6   8
      vsss           variant and clock seq 16     2        8   6
      nnnnnnnnnnnn   node ID               48     6       10   0
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              bar Alexander Barkov
              Reporter:
              greenman Ian Gilfillan
              Votes:
              2 Vote for this issue
              Watchers:
              6 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:

                  Git Integration