Performance problems in Odoo almost always have the same root causes. Here are the five I encounter most often and the fixes that work.
1. Missing Database Indexes
The _rec_name field and any field used in domain filters should have a database index. Add index=True to your field definition. For existing fields, create the index in a post_init_hook.
2. Compute Fields Without Store
Unstored compute fields recalculate on every read. If the field is expensive and changes infrequently, add store=True and define precise depends triggers.
3. N+1 Queries in List Views
Custom list views that display fields from related models trigger a separate query per record. Use prefetch_fields in your model or ensure the field has prefetch=True.
4. Attachment Bloat
Storing large files as ir.attachment records in the database balloons the PostgreSQL database size and slows backups. Switch to filestore storage and set up periodic attachment cleanup for old binary fields.
5. Synchronous Email Sending
Sending emails synchronously in button handlers blocks the UI. Always use mail.mail with auto_delete=True or trigger sends via a queue to keep response times fast.
Need help with your Odoo implementation in Germany?
A successful Odoo migration relies on deep technical knowledge of Odoo’s ORM, database architecture, and practical operational logic. Partnering with experienced Odoo consultants ensures your business critical data remains safe, accurate, and ready for future growth.
If this raised more questions than it answered, that's normal — every Odoo setup has its own quirks. I help with ongoing Odoo support and Odoo migration for businesses in Germany and internationally. Get in touch if you want a second opinion before you commit to an approach.
By Shahid Malik