我有一个令人困惑的严重MySQL查询性能问题。
如果我跑步
grails 2.4.3
一个小时后,查询仍未完成。
但是,
SET @name = 'John'
SET @customer_id = 123
SELECT full_name, address1, address2, city, state, zip
FROM users
WHERE first_name = @name
AND customer_id = @customer_id
将在1秒内完成。
诚然,users表具有超过1.42亿行,所以它是一个较大的表,但是第一个查询的行为类似于全表扫描,其中第二个查询的行为类似于索引查找,尽管first_name列上没有索引
有什么想法吗?我无法想象为什么在WHERE子句中使用用户定义的变量会使查询从耗时1秒变为超过1小时!!
查询会花很长时间,因为它是一个大表,所以我可以接受,但是我不明白为什么使用变量会使查询变慢得多。