[索引]创建索引该如何考虑

前提介绍

  1. 示例 sql

    where created_at between '2023' and '2024' and (cln2 =2 or cln3 =3) and status = 1;
  2. 条件中 between 、 等于、 in 等筛选条件,创建索引时,不同顺序对性能有影响吗。

问题

  1. 示例1 适合创建什么样的索引,性能会更好?
  2. between(如创建时间,支付时间等),in (如部门、账号等), 等于, 索引顺序对性能有哪些影响?

PS: 1/2 可以分开讨论,也可以合并讨论。 我写的sql 查询需要 2 秒,1个月数据也是2秒,1天数据是1秒多, 这个太意外了。每天数据量差不多,查询时间竟然相近。

世界上最遥远的距离不是生与死,而是你亲手制造的BUG就在你眼前,你却怎么都找不到ta。
最佳答案

简单的我都是凭感觉,复杂的发给gpt看看,然后建好查查看看速度,第二个mysql有优化器会自动优化吧,你是说联合索引最左原则的影响么

对于给定的条件 WHERE created_at BETWEEN '2023' AND '2024' AND (cln2 = 2 OR cln3 = 3) AND status = 1;,可以考虑创建以下索引来优化查询性能:

对于 created_at 字段,可以创建一个范围索引,以支持 BETWEEN 条件的快速查询:

CREATE INDEX idx_created_at ON your_table (created_at); 对于 cln2 和 cln3 字段,可以创建一个联合索引,以支持 OR 条件的快速查询:

CREATE INDEX idx_cln2_cln3 ON your_table (cln2, cln3);

1周前 评论
kis龍 (楼主) 1周前
伽蓝幻梦 (作者) 1周前
kis龍 (楼主) 1周前
讨论数量: 4

简单的我都是凭感觉,复杂的发给gpt看看,然后建好查查看看速度,第二个mysql有优化器会自动优化吧,你是说联合索引最左原则的影响么

对于给定的条件 WHERE created_at BETWEEN '2023' AND '2024' AND (cln2 = 2 OR cln3 = 3) AND status = 1;,可以考虑创建以下索引来优化查询性能:

对于 created_at 字段,可以创建一个范围索引,以支持 BETWEEN 条件的快速查询:

CREATE INDEX idx_created_at ON your_table (created_at); 对于 cln2 和 cln3 字段,可以创建一个联合索引,以支持 OR 条件的快速查询:

CREATE INDEX idx_cln2_cln3 ON your_table (cln2, cln3);

1周前 评论
kis龍 (楼主) 1周前
伽蓝幻梦 (作者) 1周前
kis龍 (楼主) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!