In other words, if such an index structure is missing, the database has no choice but to examine each record individually and to check whether it is the one it is actually looking for. This does not necessarily apply to the IDs only, as most searches are not targeted at a single record, but for a number of records, e.g. for all unpaid and overdue invoices or for all postings related to a cost center, etc., etc., …
And here, exactly, lies the rub: Odoo, unfortunately, does not itself create such an index for all these links. This problem does exist both in the older as well as in the current versions. It is difficult to say, of course, whether Odoo provides a solution for this issue in its own Cloud, but in our experience it is definitely an existing fact.
Indexing may slow down the saving process slightly, but it provides a not insubstantial boost for the reading process. In any case, the advantage is much greater than the disadvantage, which is why database administrators like to search log files for possibly missing indices and set them retroactively whenever there are performance issues.
Add to this the human factor. In other words, if – in this case – a developer defines a filter, a group or a field for sorting, all fields should actually be registered for the creation of such an index. Odoo might have been able to detect and create this automatically during the installation of a module, but instead it has provided a switch „Indexed yes/no“. Consequently, it is up to the developer to trigger the creation of indices when defining a field.
A rough analysis has shown that this switch is prone to be ignored. Odoo itself usually takes this into account quite well, but in individualizations it is easy to forget about this step.