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 ghostBookshelf = require('./base');
|
||||||
const ObjectID = require('bson-objectid').default;
|
const ObjectID = require('bson-objectid').default;
|
||||||
const uuid = require('uuid');
|
const uuid = require('uuid');
|
||||||
|
const DatabaseInfo = require('@tryghost/database-info');
|
||||||
const urlUtils = require('../../shared/url-utils');
|
const urlUtils = require('../../shared/url-utils');
|
||||||
|
|
||||||
const Newsletter = ghostBookshelf.Model.extend({
|
const Newsletter = ghostBookshelf.Model.extend({
|
||||||
|
@ -155,11 +156,17 @@ const Newsletter = ghostBookshelf.Model.extend({
|
||||||
active_members(modelOrCollection) {
|
active_members(modelOrCollection) {
|
||||||
modelOrCollection.query('columns', 'newsletters.*', (qb) => {
|
modelOrCollection.query('columns', 'newsletters.*', (qb) => {
|
||||||
qb.count('members_newsletters.id')
|
qb.count('members_newsletters.id')
|
||||||
.from('members_newsletters')
|
|
||||||
.join('members', 'members.id', 'members_newsletters.member_id')
|
.join('members', 'members.id', 'members_newsletters.member_id')
|
||||||
.whereRaw('members_newsletters.newsletter_id = newsletters.id')
|
.whereRaw('members_newsletters.newsletter_id = newsletters.id')
|
||||||
.andWhere('members.email_disabled', false)
|
.andWhere('members.email_disabled', false)
|
||||||
.as('count__active_members');
|
.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