A computer-implemented method comprising: receiving a database query requesting one or more rows of a database table (100; 200; 300) having N rows, each row having an encoded column value, wherein the encoded column values are between 1 and N inclusive, wherein each distinct encoded column value occurs in the column exactly once, wherein each encoded column value represents a corresponding original column value, and wherein the query specifies a first original column value; mapping the first original column value to a first row number identifying a first row; chaining (615 - 675) through the encoded column values in the table (100; 200; 300) from the first row to identify subsequent rows until a row having an encoded column value matching the first row number is reached; and identifying (620; 660) the row as a first row satisfying the query, wherein the encoded column values define a permutation cycle through row numbers of the table (100; 200; 300), and wherein chaining through the encoded column values in the table (100; 200; 300) from the first row follows the permutation cycle, characterized in that the method further comprises: determining that a particular encoded column value is associated with an additional cycle (512; 514; 516; 518) within the permutation cycle, wherein chaining through the encoded column values in the table (100; 200; 300) from the first row comprises following the additional cycle (512; 514; 516; 518) within the permutation cycle, and wherein the row having an encoded column value matching the first row number is on the additional cycle (512; 514; 516; 518). receiving a database query requesting one or more rows of a database table (100; 200; 300) having N rows, each row having an encoded column value, wherein the encoded column values are between 1 and N inclusive, wherein each distinct encoded column value occurs in the column exactly once, wherein each encoded column value represents a corresponding original column value, and wherein the query specifies a first original column value; mapping the first original column value to a first row number identifying a first row; chaining (615 - 675) through the encoded column values in the table (100; 200; 300) from the first row to identify subsequent rows until a row having an encoded column value matching the first row number is reached; and identifying (620; 660) the row as a first row satisfying the query, wherein the encoded column values define a permutation cycle through row numbers of the table (100; 200; 300), and wherein chaining through the encoded column values in the table (100; 200; 300) from the first row follows the permutation cycle, characterized in that the method further comprises: determining that a particular encoded column value is associated with an additional cycle (512; 514; 516; 518) within the permutation cycle, wherein chaining through the encoded column values in the table (100; 200; 300) from the first row comprises following the additional cycle (512; 514; 516; 518) within the permutation cycle, and wherein the row having an encoded column value matching the first row number is on the additional cycle (512; 514; 516; 518). determining that a particular encoded column value is associated with an additional cycle (512; 514; 516; 518) within the permutation cycle, wherein chaining through the encoded column values in the table (100; 200; 300) from the first row comprises following the additional cycle (512; 514; 516; 518) within the permutation cycle, and wherein the row having an encoded column value matching the first row number is on the additional cycle (512; 514; 516; 518).