Mysql 加快大型表上的SELECT查询

Mysql 加快大型表上的SELECT查询,mysql,sql,Mysql,Sql,如何提高查询时间?我有一个表,用于使用以下字段进行省钱交易: id, customersId, paymentId, amount, cash, createDate 我的查询获得一个客户交易记录: SELECT id,amount,cash,createDate FROM customers_transactions WHERE customersId = 2784 此表有1000万条或更多记录。执行查询大约需要13秒 该表包含以下索引: id, customersId (unique)

如何提高查询时间?我有一个表,用于使用以下字段进行省钱交易:

id, customersId, paymentId, amount, cash, createDate
我的查询获得一个客户交易记录:

SELECT id,amount,cash,createDate
FROM customers_transactions
WHERE customersId = 2784
此表有1000万条或更多记录。执行查询大约需要13秒

该表包含以下索引:

id, customersId (unique)
customersId, createDate (unique)
这些分区:

10 partiotions By RANGE on customersId
LESS THAN 1000
LESS THAN 2000
LESS THAN 3000
LESS THAN 4000
LESS THAN 5000
LESS THAN 6000
LESS THAN 7000
LESS THAN 8000
LESS THAN 9000
LESS THAN 10000
该服务器有8GB的RAM,核心i5为3.2GHz


我希望在不到0.5秒的时间内运行此查询。请从分区中删除此查询,除非您需要它们来执行其他操作

我们可以创建覆盖索引(索引包含所有所需的列),但这是一个过度的操作

同时-
将Id设为主键并抛出Id、CustomerID(唯一)

附加说明

为什么要将
createDate
转换为
customersId,createDate(unique)

从分区中删除,除非您需要它们用于其他用途

我们可以创建覆盖索引(索引包含所有所需的列),但这是一个过度的操作

同时-
将Id设为主键并抛出Id、CustomerID(唯一)

附加说明

为什么要将
createDate
发送到
customersId,createDate(unique)

您对查询做了解释吗?你在桌子上用过OPTIMIZE吗?查询非常简单,因此我希望它能够非常轻松地提取相关索引并使用它。请仅在
customersId
上尝试索引。或者颠倒
id,customersId
索引中的列顺序。在SQL实现中,我熟悉复合索引中的“子索引”——在本例中是
customersId
——不会自己使用;与
中的相同,其中customersId=2784
。如果引用该索引的第一列,那么该索引显然已被使用。在MySQL中,在这种情况下,它应该使用索引的第一部分。这里有些东西不符合逻辑。你能检查一下执行计划并分享一下吗?谢谢你解释过这个问题吗?你在桌子上用过OPTIMIZE吗?查询非常简单,因此我希望它能够非常轻松地提取相关索引并使用它。请仅在
customersId
上尝试索引。或者颠倒
id,customersId
索引中的列顺序。在SQL实现中,我熟悉复合索引中的“子索引”——在本例中是
customersId
——不会自己使用;与
中的相同,其中customersId=2784
。如果引用该索引的第一列,那么该索引显然已被使用。在MySQL中,在这种情况下,它应该使用索引的第一部分。这里有些东西不符合逻辑。你能检查一下执行计划并分享一下吗?感谢如果表有主键,则partitions键必须位于主键上。如果我将id设为主id,则无法按CustomerID划分表。createDate索引使结果范围缩小。通过此索引,我的查询时间为3秒,没有此索引的查询时间为13个扇区。因此-
请从分区中删除,除非您需要分区用于其他用途。
如果表有主键,则分区键必须位于主键上。如果我将id设为主id,则无法按CustomerID划分表。createDate索引使结果范围缩小。根据此索引,我的查询时间为3秒,没有此索引的查询时间为13个扇区。因此-
从分区中删除,除非您需要它们来做其他事情。