У меня есть большая таблица с 60M строк и 50 столбцов (столбцы включают "company_idx" и "timestamp"). Таким образом, когда я выполняю свой простой SQL-запрос, такой как:
SELECT * FROM companies_Scores.Scores
WHERE `company_idx`=11
AND `timestamp` BETWEEN '"+start_date+" 00:00:00' AND '"+end_date+" 00:00:00'
В основном это занимает 4 минуты (что слишком долго). Таким образом, я подумал об индексации своей таблицы, поэтому я сделал:
CREATE INDEX idx_time ON companies_Scores.Scores(company_idx, timestamp) USING BTREE;
Однако, когда я сейчас делаю следующее, для запуска также требуется 4 минуты.
SELECT * FROM companies_Scores.Scores
USE INDEX(idx_time)
WHERE `company_idx`=11
AND `timestamp` BETWEEN '"+start_date+" 00:00:00' AND '"+end_date+" 00:00:00'
Я действительно новичок с SQL и индексами. Так что я не совсем уверен, как использовать индексы в запросе. Я думаю, что тот, который я сделал выше, является правильным? Почему это занимает так много времени? Как я могу улучшить это? Я бы хотел, чтобы мои запросы для каждого company_idx были максимально быстрыми.
Когда я запускаю EXPLAIN, я получаю:
[{'Cardinality': 115751,
'Collation': 'A',
'Column_name': 'company_idx',
'Comment': '',
'Index_comment': '',
'Index_type': 'BTREE',
'Key_name': 'idx_time',
'Non_unique': 1,
'Null': 'YES',
'Packed': None,
'Seq_in_index': 1,
'Sub_part': None,
'Table': 'Scores'},
{'Cardinality': 45831976,
'Collation': 'A',
'Column_name': 'timestamp',
'Comment': '',
'Index_comment': '',
'Index_type': 'BTREE',
'Key_name': 'idx_time',
'Non_unique': 1,
'Null': 'YES',
'Packed': None,
'Seq_in_index': 2,
'Sub_part': None,
'Table': 'Scores'}]