我遇到查询速度慢的问题,进行“简单”选择..我不明白问题是什么...这是一个大表..但这是一个简单的查询..
表格:
business: (1.000.000 reg)
id (INDEX PRIMARY INT(11) UNSIGNED)
active (INDEX TINYINT(1))
products: (32.000.000 reg)
id (INDEX PRIMARY INT(11) UNSIGNED)
business_id (INDEX INT(11) UNSIGNED)
offer_start (INDEX INT(12) UNSIGNED) (timestam unix)
offer_end (INDEX INT(12) UNSIGNED) (timestamp unix)
price_offer (VARCHAR(10)) (price with decimals)
active (INDEX TINYINT(1))
business.id、products.id、products.offer_start 和 products.offer_end 是索引(分隔)
当我这样做时:
SELECT SQL_NO_CACHE * FROM products
LEFT JOIN business ON business.id = products.business_id
WHERE
(business.active = '1' AND business.paylimit > 1314029906)
AND
(products.active = '1' AND products.offer_start < 1314029906 AND products.offer_end > 1314029906 AND products.price_offer > 0)
LIMIT 0,10
需要 21 秒。
问题是这样的:products.offer_start < 1314029906 AND products.offer_end > 1314029906
大约需要 20 秒才能给出结果
是否可以进行此查询,过滤其他表单以加快速度?
最佳答案
有关表架构的一些注释:
- offer_start (INDEX INT(12) UNSIGNED) - 12 没有意义,因为 INT 中的最大符号为 11。offer_end 相同
- active (INDEX TINYINT(1)) - 索引无用,因为 1000000 的基数将为 2 - 1 或 0
- price_offer (VARCHAR(10)) - 您可以使用 float 或小数。 products.price_offer > 0 会更快。
关于mysql - 大表慢SQL,按时间戳过滤(int12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151357/