Mysql 使用<;在包含4.000.000行的表中

Mysql 使用<;在包含4.000.000行的表中,mysql,select,Mysql,Select,我的purchasedItems表约有400万行: itemId | orderQuantity | inStockQuantity | backorderQuantity | backorderOrderedQuantity 我的问题是: SELECT * FROM purchasedItems WHERE backorderOrderedQuantity < backorderQuantity 你应该做什么: 对查询运行EXPLAIN: EXPLAIN SELECT * FRO

我的purchasedItems表约有400万行:

itemId | orderQuantity | inStockQuantity | backorderQuantity | backorderOrderedQuantity
我的问题是:

SELECT * FROM purchasedItems 
WHERE backorderOrderedQuantity < backorderQuantity
你应该做什么:

  • 对查询运行
    EXPLAIN

     EXPLAIN SELECT * FROM purchasedItems 
     WHERE backorderOrderedQuantity < backorderQuantity
    
    解释从purchasedItems中选择*
    其中BackOrderedQuantity
    以确保使用索引

  • 确保BackOrderedQuantity和backorderQuantity是整数(最好是同一类型的整数)。可能也应该尽可能小(如果int(1)足够,不要使用int(8))

  • 一定不要把所有的记录都拿走。我不知道您的查询返回了多少条记录,但您应该添加一些限制(10/100),例如不返回100万条记录-例如在查询结束时添加
    limit 100

  • 编辑


    我已经检查过了,看起来MySQL在这样的查询中根本不使用索引,所以您可能需要创建触发器来将这些数据插入/删除到额外的表中。例如,您可以只在那里存储itemId(如果它们是唯一的)

    MySQL不支持使用索引进行
    t1.col1
    比较。已经有一些问题回答了你的问题

    我想添加索引列
    backorder\u diff
    ,计算为
    backorderedquantity-backorderQuantity
    (创建插入和更新触发器,使列保持最新,而无需您进行更多的整理),只需使用:

    WHERE backorder_diff > 0
    
    WHERE backorder_diff > 0