【发布时间】:2011-11-24 23:06:17
【问题描述】:
我从外部系统接收到一系列产品 ID。我必须显示保留序列的产品信息。
我正在使用以下选择:
SELECT * FROM products
WHERE prodid in (10331,11639,12127..) ORDER BY Field(prodid, 10331,11639,12127...);
序列可以包含 20 个 ID。 prodid 有 b-tree 索引。
这是非常频繁的查询,我正在努力寻找提高系统该部分性能的方法。现在这个查询的平均时间是 0.14-0.2 秒 我想将时间减少到 0.01-0.05 秒。
最好的方法是什么? MySQL HASH 索引,将产品 id 存储在 memcached 中,还是其他?
【问题讨论】:
-
prodid列的数据类型是什么?IN子句中通常有多少个产品 ID? -
prodid 为 INT (prodid
-
直接ID选择的数据之间是否有任何额外的关系?瓶颈可能在于每次查询跳过一个(可能很大的)数据库 20 次以选择微小的数据,因此通过其他一些参数对其进行聚类可能是一种选择。
-
不,与其他表没有关系。如图所示,表格和 SELECT 很简单。外部系统完成所有繁重的工作 - 我只需要选择这些 ID 并显示产品信息。
标签: mysql performance memcached