как оптимизировать этот выбор, где и "datetime" sql? - PullRequest
0 голосов
/ 12 июня 2019

У меня есть запрос, который был зарегистрирован в файле медленного журнала mysql:

# Time: 2019-06-12T10:23:05.410474Z
# User@Host: coi[coi] @  [172.31.ip.ip]  Id:    91
# Query_time: 7.099090  Lock_time: 0.000065 Rows_sent: 0  Rows_examined: 
844952

use coi;
SET timestamp=1560334985;

SELECT  `trades`.* FROM `trades` 
    WHERE `trades`.`market_id` = 'omgeth' 
    AND (created_at > '2019-06-11 18:22:58.310183')  
    ORDER BY price 
    LIMIT 1;

Здесь, как оптимизировать этот запрос?добавить индекс в столбец "market_id and made_at"?

почему этот запрос проверил 844952 записей?Что делать, если я добавляю индекс только в столбец "creation_at"?это поможет?

это моя структура таблицы:

(this create table SQL comes from the "show create table" command) 

CREATE TABLE `trades` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` decimal(32,16) DEFAULT NULL,
  `market_id` varchar(10) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_trades_on_created_at` (`created_at`) USING BTREE,
  KEY `index_trades_on_market_id` (`market_id`),
  KEY `index_trades_on_price` (`price`),

) ENGINE=InnoDB AUTO_INCREMENT=3509954 DEFAULT CHARSET=utf8

спасибо большое!

1 Ответ

2 голосов
/ 12 июня 2019

Для этого запроса:

SELECT  t.*
FROM `trades` t
WHERE t.`market_id = 'omgeth' AND 
      t.created_at > '2019-06-11 18:22:58.310183'
ORDER BY t.price
LIMIT 1;

Вы хотите индекс на trades(market_id, created_at).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...