有些条件的SQL查询工作缓慢 - MySQL

时间:2018-01-12 09:58:37

标签: mysql sql

这是我的问题,我有一张包含1,230,000条记录的表格,我在我的应用中执行此查询

SELECT id_product 
  FROM products 
 WHERE user_id = '322' 
   AND (status = 1 OR status = 3) 
   AND product_date BETWEEN '2017-11-01' AND '2017-12-31' 
   AND required = 0

此查询从表中获取206条记录(这是正确的),但它需要4.5秒,这太多了,因为我有时在同一页面中使用不同的值多次进行此查询。

但如果我只做这个

SELECT id_product FROM products WHERE user_id = '322'

需要0.322秒

WHERE语句中的每一列都有一个索引,所以这是我的问题,是否真的有必要在查询中添加条件?因为在这种情况下,我没有看到这一点,我的意思是第一个查询只找到我需要的东西,但它需要很长时间,第二个查询得到所有,但我可以使用编程语言我使用或你做过滤器我觉得有什么我想念的吗?我希望你能引导我,谢谢。

1 个答案:

答案 0 :(得分:0)

您可以查看文档以使用索引提示强制您的查询使用或不使用这样的索引:

SELECT * FROM table1 USE INDEX (col1_index,col2_index)
  WHERE col1=1 AND col2=2 AND col3=3;

SELECT * FROM table1 IGNORE INDEX (col3_index)
  WHERE col1=1 AND col2=2 AND col3=3;

文档:https://dev.mysql.com/doc/refman/5.7/en/index-hints.html

此外,如果确实需要,您可以创建一个更有效的索引,包括WHERE的其他字段。测试两个选项,看看哪个更好。