[索引]创建索引该如何考虑
前提介绍
示例 sql
where created_at between '2023' and '2024' and (cln2 =2 or cln3 =3) and status = 1;
条件中 between 、 等于、 in 等筛选条件,创建索引时,不同顺序对性能有影响吗。
问题
- 示例1 适合创建什么样的索引,性能会更好?
- between(如创建时间,支付时间等),in (如部门、账号等), 等于, 索引顺序对性能有哪些影响?
PS: 1/2 可以分开讨论,也可以合并讨论。 我写的sql 查询需要 2 秒,1个月数据也是2秒,1天数据是1秒多, 这个太意外了。每天数据量差不多,查询时间竟然相近。
简单的我都是凭感觉,复杂的发给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);