【问题标题】:Making SELECT Query faster使 SELECT 查询更快
【发布时间】:2014-03-17 14:08:47
【问题描述】:

我在 MySQL 中有一个查询:

SELECT FIELD1, FIELD2, FIELD3 
FROM TABLE1 
WHERE 
  (FIELD3 >= INT1 AND FIELD3 <= INT2) 
  AND FIELD2 IN (INTEGER_LIST)

任何想法如何使这个查询更快? FIELD2 和 FIELD3 均已编入索引。即使取消对 FIELD2 的检查,也不会发生与性能相关的任何事情。

执行计划信息:

id: 1
select_type: SIMPLE
table: TABLE1
type: ref
possible_keys: FIELD2, FIELD3
key: FIELD2
ref: const
rows: 310000
Extra: using where

【问题讨论】:

  • 向我们展示您的执行计划?
  • 索引是什么样的?
  • INTEGER_LIST 是什么?
  • 当索引使用正确时,我在这里看不到任何错误!更常见的是 MySQL 服务器配置太小。请向我们展示您的 my.cnf!

标签: mysql sql performance select


【解决方案1】:

是的。 table1(field2, field3, field1) 上的索引应该可以加快查询速度:

create index table1_field2_field3_field1 on table1(field2, field3, field1)

【讨论】:

  • 如果 SELECT 中有更多字段怎么办?您是否应该创建一个索引,让所有这些都响起?
  • @schmi 。 . .可能不是。关键部分是前两列。第三种似乎是将索引转换为查询的覆盖索引的成本相对较低的方法。
【解决方案2】:

您是否尝试在 (FIELD3, FIELD2) 上设置复合索引? (见 MySQL 中最左边的前缀问题)

设置索引实际上取决于您期望的查询类型:

  • 可能在两个字段上 - 单独(FIELD2 或 FIELD3)
  • 始终同时在这两个字段上并按此顺序进行
  • 可以打开 (FIELD3. FIELD2) 或 (FIELD2, FIELD3)

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2020-04-21
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-07-25
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多