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:
parent
db7d44a76a
commit
8debc4eb02
1 changed files with 8 additions and 1 deletions
|
@ -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');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue