我有一张看起来像这样的表:
ID(INT,9,UNIQUE KEY)---项目(INT,3)---用户ID(INT,9)---位置(VARCHAR,12)
现在我想运行folling查询:
SELECT COUNT( * )
FROM table
WHERE Position LIKE 'BAG%'
AND Userid = ".USERID."
这些案件唯一可能的位置是“BAG0”,“BAG1”,[...],“BAG6”
那些总是唯一的 - 这意味着没有Userid在BAG2中有两个项目。例如。它并不总是唯一的 - 例如两行“Userid:82378,Positon:'BOX1'”是可能
即使我尝试IN() - Clause也不会改变结果。
此查询的“发送数据”时间总是大约50毫秒。
您对我如何修改此表有任何想法,以便此查询更快地运行吗?
答案 0 :(得分: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.";