diff options
| author | Baptiste Jonglez <git@bitsofnetworks.org> | 2017-01-01 21:17:47 +0100 |
|---|---|---|
| committer | Baptiste Jonglez <git@bitsofnetworks.org> | 2017-01-02 13:09:26 +0100 |
| commit | 74df61400793f2a66355541de8f2103a1f457346 (patch) | |
| tree | 3246e7597d4b8d9be549760250f1f2f6f7dc734f /AUTHORS | |
| parent | 4d5c8a507b3bce8d4802b57ab3b34e5a4cb3750e (diff) | |
| download | ihatemoney-mirror-74df61400793f2a66355541de8f2103a1f457346.zip ihatemoney-mirror-74df61400793f2a66355541de8f2103a1f457346.tar.gz ihatemoney-mirror-74df61400793f2a66355541de8f2103a1f457346.tar.bz2 | |
Optimise SQL queries when displaying bills for a project
By defaut, SQLAlchemy uses lazy loading, which means that displaying n
bills will generate around n queries (to get the list of owers of each
bill). Pre-load the list of owers to drastically decrease the number of
SQL queries.
Before this commit: 1004 SQL queries, 7535 ms elapsed time, 7536 ms CPU time, 530 ms SQL time
After this commit: 5 SQL queries, 3342 ms elapsed time, 3393 ms CPU time, 15 ms SQL time
Measured request: display the list of all bills for the project (without displaying the sidebar with balances)
Test setup to measure performance improvement:
- 5 users with various weights
- 1000 bills, each paid by a random user, each involving all 5 users
- laptop with Celeron N2830@2.16 GHz, SSD Samsung 850 EVO
- sqlite database on SSD, using sqlite 3.15.2
- python 2.7.13
- Flask-DebugToolbar 0.10.0 (to count SQL queries and loading time)
Performance measurements (using Flask-DebugToolbar with the second
request, to avoid measuring cold-cache performance):
- number of SQL queries
- elapsed time (from request to response)
- total CPU time consumed by the server handling the request
- total time spent on SQL queries (as reported by SQLAlchemy)
Diffstat (limited to 'AUTHORS')
0 files changed, 0 insertions, 0 deletions
