【发布时间】:2015-09-11 14:19:40
【问题描述】:
我有一个选择查询,其中一个有许多条件变量,并且都被索引,第二个有更少的索引条件变量。主要的条件是** XX ** 中的,其余的都是可选的。请您建议哪一个可以导致更快更好的查询。
我只需要知道传递更多可选的索引条件变量是否好。
1) SELECT *
FROM tableX
WHERE city_id = :city_id
AND category_id = :category_id
AND type_id = :type_id
AND **valid_date** > :date_now
AND (**N_lat** BETWEEN :sw_lat AND :ne_lat )
AND (**E_lng** BETWEEN :sw_lng AND :ne_lng )
AND (**price_deposit** BETWEEN :min_deposit AND :max_deposit )
AND (**price_rent** BETWEEN :min_rent AND :max_rent )
ORDER BY $colomnX DESC
2) SELECT *
FROM tableX
WHERE **valid_date** > :date_now
AND (**N_lat** BETWEEN :sw_lat AND :ne_lat )
AND (**E_lng** BETWEEN :sw_lng AND :ne_lng )
AND (**price_deposit** BETWEEN :min_deposit AND :max_deposit )
AND (**price_rent** BETWEEN :min_rent AND :max_rent )
ORDER BY $colomnX DESC
【问题讨论】:
-
更多的条件=更多的比较,会吃掉更多的cpu。你无法解决这个问题。另一方面,实际从存储中获取匹配记录的成本可能超过比较的成本,因此通过尽早消除更多记录来减少获取需求会有所帮助。但总的来说,我们没有办法回答这个问题。这完全取决于您的索引结构以及您的数据库的执行方式。
-
谢谢,我会考虑通过消除更多可选变量来减少索引以节省更多CPU,但我不确定这是否会导致mysql通过减少条件来读取更多记录?
标签: mysql performance variables select indexing