Mysql Sequelize查询比Knex慢很多

Mysql Sequelize查询比Knex慢很多,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我有以下代码: var apiLogger = require(__dirname + '/../configurations/logger').api; var Knex = require('knex'); var microtime = require('microtime'); var Sequelize = require("sequelize"); database = new Sequelize('MYDATABASE', 'MYUSERNAME', 'MYPASSWORD',

我有以下代码:

var apiLogger = require(__dirname + '/../configurations/logger').api;
var Knex = require('knex');
var microtime = require('microtime');
var Sequelize = require("sequelize");

database = new Sequelize('MYDATABASE', 'MYUSERNAME', 'MYPASSWORD', {
  host: "MYHOST",
  port: 3306,
  dialect: 'mysql',
  pool: {
    maxConnections: 5,
    maxIdleTime: 30
  }
});

Knex.Initialize({
  client: 'mysql',
  connection: {
    host     : 'MYHOST',
    user     : 'MYUSERNAME',
    password : 'MYPASSWORD',
    database : 'MYDATABASE',
    charset  : 'utf8'
  }
});

exports.test = function(req, res){
  apiLogger.info('Request made to /api/test');

  var start = microtime.nowDouble();
  database.query('SELECT id, username FROM Users ORDER BY RAND() LIMIT 10').then(function(data) {
    console.log('query time : ' + (microtime.nowDouble() - start));
    res.json(data);
  }, function(data) {
    res.json(data);
  });
};

exports.test2 = function(req, res){
  apiLogger.info('Request made to /api/test2');

  var start = microtime.nowDouble();
  Knex.Raw('SELECT id, username FROM Users ORDER BY RAND() LIMIT 10').then(function(data) {
    console.log('query time : ' + (microtime.nowDouble() - start));
    res.json(data);
  }, function(data) {
    res.json(data);
  });
};
如果我执行
exports.test
(api调用
/api/test
)中的代码,彼此间隔约5秒,平均响应约为430ms,这就是Sequelize代码

如果我每隔5秒运行
exports.test2
(以及
/api/test2
的api调用)中的代码,第一次调用是430ms,但之后的调用大约是100ms,这就是Knex

我应该提到的是,如果我运行
exports.test
code,彼此之间的间隔不到一秒,我会得到大约100毫秒的响应时间,而使用
exports.test2
代码,我可以在两次调用之间等待2-3分钟,仍然会得到100毫秒的响应时间


我在Sequelize中是否缺少某种配置,导致它比Knex慢得多?为什么使用Knex时间隔几分钟的请求要比使用Sequelize时间隔几秒钟的请求快得多

我将Knex中的默认连接池设置为至少10:

这可能就是原因

您可以使用以下设置池连接数:

Knex.Initialize({
  client: 'mysql',
  connection: {
    host     : 'MYHOST',
    user     : 'MYUSERNAME',
    password : 'MYPASSWORD',
    database : 'MYDATABASE',
    charset  : 'utf8'
  },
  pool: {
    max: 5
  }
});

我怀疑Knex是否在缓存,因为我正在按RAND()进行排序,这使得每个请求的结果都不同。我理解为什么每次查询都需要更长的时间,这是因为MySQL会在第一次请求后缓存数据,但如果是MySQL缓存,除非Sequelize强制MySQL不使用缓存,否则这两个库都会受益。A.不确定这是否可能,B.没有很好的理由。