小编Kry*_*ble的帖子

RDS上的Mysql避免index_merge

我对 mysql 优化和例程有一些经验,但最近有一些事情吸引了我。

我在 ec2 实例上使用本地 mysql 安装,然后刚刚迁移到 RDS,这样我就可以高枕无忧了。

问题是我的应用程序存在一些遗留问题,之前在 mysql 5.1 上运行,现在在 mysql 5.6 上运行。

我们的数据库是建立在index_merge将被mysql使用的前提下的,所以我们的索引不是复合的;它们都会影响单列;我知道这可能有多糟糕,也知道它有多糟糕,但到目前为止它运行良好;我现在无法真正更改它,因为我们有 300 多张桌子。

让我陷入麻烦的是我的一张桌子控制着库存。该表具有以下结构:

id (PK)
companyId (btree index)
productId (btree index)
transactionType (input, output or stock balance; btree index)
transactionDate (btree index)
transactionPrice
Run Code Online (Sandbox Code Playgroud)

以及其他一些并不重要的专栏。

当我运行选择查询来获取给定产品的最后价格时,如下所示:

SELECT 
    transactionPrice
FROM
    stock
WHERE
    productId = x
        AND transactionType = 'input'
        AND companyId = y
        AND transactionDate < '2017-07-07'
ORDER BY transactionDate DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我所期望的是 MySQL 会合并(很可能)非常具体的 ProductId 和 companyId 索引,并读取大约 4 行;但实际发生的情况是,MySQL 决定通过对 transactionDate 进行排序而不将其合并到任何其他索引来迭代超过 …

mysql index optimization

5
推荐指数
1
解决办法
1485
查看次数

标签 统计

index ×1

mysql ×1

optimization ×1