MySQL использует довольно простой алгоритм для назначения ключей разделам:
https://dev.mysql.com/doc/refman/8.0/en/partitioning-linear-hash.html
В основном, учитывая num доступных разделов и клавиша k :
MySQL пытается присвоить ключ k разделу " k по модулю V", где V - наименьшая мощность на 2 больше, чем у раздела. Если выходное значение превышает num , они неоднократно пытаются с следующей меньшей мощностью 2: k mod V / 2 ...
Что я не понимаю, так это зачем им нужен l oop: кажется, что они могут остановиться на V / 2 и никогда не должны учитывать V / 4 . Я что-то упустил или do c делает вещи более сложными, чем они должны быть?
Я вспоминаю код Mysql do c ниже:
V = POWER(2, CEILING(LOG(2, num)))
N = F(k) & (V - 1)
While N >= num
{ V = V / 2
N = N & (V - 1)
}
Assign key k to N