我有以下查询,需要很长时间(大约1分钟):
SELECT `transaction`.`fuel_terminal_id`, `transaction`.`xboard_id`, `transaction`.`gas_station_id`, `transaction`.`operator_id`, `transaction`.`shift_id`, `transaction`.`fuel_type`, `transaction`.`purchase_type`, `shift`.`num` AS `shiftNum`, `shift`.`shift_state_id` AS `shiftStateId`, `shift`.`start_totalizer_dispenser_1` AS `startTotalizerDispenser1`, `shift`.`start_totalizer_dispenser_2` AS `startTotalizerDispenser2`, `shift`.`end_totalizer_dispenser_1` AS `endTotalizerDispenser1`, `shift`.`end_totalizer_dispenser_2` AS `endTotalizerDispenser2`, min(shift.start_time)AS shiftStartTime, max(shift.end_time)AS shiftEndTime, count(*)AS groupCount, sum(fuel_cost)AS sumFuelCost, sum(payment_cost)AS sumPaymentCost, sum(actual_amount / 100)AS sumActualAmount, min(start_fuel_time)AS firstFuelingDate,max(end_fuel_time)AS lastFuelingDate
FROM `transaction`
LEFT JOIN `shift`
ON shift.gs_id = TRANSACTION .gas_station_id
AND shift.terminal_id = TRANSACTION .fuel_terminal_id
AND shift.id = TRANSACTION .shift_id
AND shift.start_time = TRANSACTION .shift_start_time
GROUP BY `transaction`.`gas_station_id`,
`transaction`.`fuel_terminal_id`,
`transaction`.`shift_start_time`,
`transaction`.`fuel_type`,
`transaction`.`purchase_type`,
`transaction`.`operator_id`;
我可以通过将表“ shift”中的列“ operator_id”的数据大小从VARCHAR 255更改为VARCHAR 16,并将表“ transaction”中的该列的数据类型从TEXT更改为TEXT,来加快查询速度(大约25%) VARCHAR 16.但是,我仍然需要提高速度(也许通过添加更多索引或更改它们?)。
我在《MySQL 5.7参考手册》中已经读到,如果“ possible_keys”列为NULL,则没有相关索引。因此,我想知道是否有人可以帮助我了解我是否没有选择正确的索引?这些是我在表“事务”上添加的索引:
好吧,我只是发现我的问题与索引或查询或数据库结构无关。当我在本地服务器上运行查询时,它很快,而在实时数据库上却很慢。经过一些搜索,我发现增加buffer_pool_size(比您的数据库大小大一点,在我的情况下,我将其从defult值(8M)增加到2G)可以提高innoDB性能。
阅读以下链接有助于我了解innoDb中的缓冲池以及如何配置它:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句