1

我有一个看起来像这样的表:

ID (INT, 9, UNIQUE KEY) --- 项目 (INT, 3) --- 用户 ID (INT, 9) --- 位置 (VARCHAR, 12)

现在我想运行以下查询:

SELECT COUNT( * ) 
FROM table
WHERE Position LIKE  'BAG%'
AND Userid = ".USERID."

对于这些情况,唯一可能的位置是“BAG0”、“BAG1”、[...]、“BAG6”
,并且这些位置始终是唯一的——这意味着例如,在 BAG2 中没有包含两个项目的用户 ID。
但它并不总是唯一的 - 例如两行具有“Userid:82378,Positon:'BOX1'”是可能的

即使我尝试IN()子句也不会改变结果。

此查询的“发送数据”时间始终约为 50 毫秒。

你有什么想法我可以修改这个表以便这个查询更快地工作吗?

4

1 回答 1

2

这是您的查询:

SELECT COUNT( * ) 
FROM table
WHERE Position LIKE 'BAG%' AND
      Userid = ".USERID.";

这是一个非常简单的查询。加快速度的唯一方法是使用索引。我建议一个综合指数table(UserId, Position)。MySQL 应该优化 ,like因为初始前缀是恒定的。但是,如果你想非常非常确定索引被使用,你可以这样做:

SELECT COUNT( * ) 
FROM table
WHERE Position in ('BAG0', 'BAG1', 'BAG2', 'BAG3', 'BAG4', 'BAG5', 'BAG6') and
      Userid = ".USERID.";
于 2013-08-07T22:29:02.643 回答