0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Forced use of specific index on members_newsletters

refs https://github.com/TryGhost/Product/issues/4181

- we've seen MySQL change its query planner to use a different index
  than the ideal one, resulting in drastically slower query performance
  when fetching newsletters with the member count
- this forces the use of the ideal index on MySQL
- this kept many of the Ghost team up overnight, so I hope MySQL is
  happy
This commit is contained in:
Daniel Lockyer 2023-11-22 13:42:20 +01:00 committed by Daniel Lockyer
parent db7d44a76a
commit 8debc4eb02

View file

@ -1,6 +1,7 @@
const ghostBookshelf = require('./base');
const ObjectID = require('bson-objectid').default;
const uuid = require('uuid');
const DatabaseInfo = require('@tryghost/database-info');
const urlUtils = require('../../shared/url-utils');
const Newsletter = ghostBookshelf.Model.extend({
@ -155,11 +156,17 @@ const Newsletter = ghostBookshelf.Model.extend({
active_members(modelOrCollection) {
modelOrCollection.query('columns', 'newsletters.*', (qb) => {
qb.count('members_newsletters.id')
.from('members_newsletters')
.join('members', 'members.id', 'members_newsletters.member_id')
.whereRaw('members_newsletters.newsletter_id = newsletters.id')
.andWhere('members.email_disabled', false)
.as('count__active_members');
// https://github.com/TryGhost/Product/issues/4181
if (DatabaseInfo.isMySQL(ghostBookshelf.knex)) {
qb.fromRaw('members_newsletters force index (members_newsletters_newsletter_id_foreign)');
} else {
qb.from('members_newsletters');
}
});
}
};