Mysql 5.7.21
Я использую пул для подключения к базе данных и запуска SQL
let mysql = require('mysql');
let pool = mysql.createPool(db);
pool.getConnection((err, conn) => {
if(err){
...
}else{
console.log('allConnections:' + pool._allConnections.length);
let q = conn.query(sql, val, (err, rows,fields) => {
...
У меня есть таблица с около 1 000 000 записей. Я написал выбор, чтобы найти записи.
select * from tableA where trackingNo in (?)
Я отправлю trackingNo через массив параметров. Количество trackingNo составляет около 20000. Это означает, что длина массива около 20000.
И я сделал индекс для столбца trackingNo. (столбец trackingNo имеет тип varchar, не является уникальным, может иметь значение null, пустое значение и все возможные значения)
Проблема в том, что я считаю, что для получения результатов потребуется около 5 минут! 5 минут здесь означают чисто внутреннее время обработки SQL. Я думаю, что это слишком медленно, чтобы сопоставить 20000 записей в 1 000 000 записей. Есть ли у вас предложения для выбора .. в?
Объясните SQL:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE tableA null ALL table_tracking_no_idx null null null 999507 50 Using where