哪些地方应该创建索引
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
create INDEX idx_status ON table_name(status); select * from table_name where status = 1; 以下条件查询大概率会走索引:
2. 对于查找单条记录的字段创建唯一索引唯一键对应的数据只有一条,要找到这条记录只能全表扫描,数据量大会很慢。加唯一索引可以直接定位到记录。 create UNIQUE INDEX idx_uid ON table_name(uid); select * from table_name where uid = 123; 3. 在表与表的关联键上创建索引表JOIN时依靠这个键进行关联,如果不索引就会扫描全表去对比键值,数据量越大关联效率越低。加索引可以快速匹配关联键值。 create INDEX idx_post_id ON comments(post_id); select * from comments where post_id = 12345; 4. 在经常需要排序的字段建立索引排序时如果不加索引,需要全表扫描获取所有记录再排序,数据量大时排序开销巨大。索引可以按序直接读取记录,避免全表扫描。 create INDEX idx_create_time ON table_name(create_time); select * from table_name ORDER BY create_time DESC; 5. 对于频繁用于left join的表的关联键创建索引左连表时都会全表扫描右表去匹配关联条件,数据量大时非常慢。加索引可以快速过滤出匹配的记录。 create INDEX idx_user_id ON table_a(user_id); select * from table_a LEFT JOIN table_b ON table_a.user_id = table_b.user_id; 6. 在表的数据量巨大时对主键创建索引主键默认会有索引,如果去掉索引,增删改查所有操作都会变慢,特别是主键查询需要全表扫描。 create INDEX idx_id ON large_table(id); 7. 对于组合查询的字段建立联合索引单列过滤效果不好时,加联合索引可以多列组合过滤提升效率。 这里的使用场景太广泛,请注意。 假设我们有一个示例表格
我们希望对 在这种情况下,我们可以创建一个联合索引,将 create INDEX idx_product_name_category ON products (product_name, category); 以上命令将在 现在,假设我们要执行右模糊查询,找到以字符串 select product_name from products where product_name LIKE 'xyz%' AND category = 'some_category'; 在这个查询中,MySQL可以有效地利用联合索引 8. 在文本字段创建前缀索引上面一点其实说到了模糊查询的问题,针对模糊查询,有几点需要提及:
因此在给文字字段创建索引后,应尽量: 要使
create INDEX idx_title_prefix ON table(title(10)); select * from table where title LIKE 'key%' 原文 该文章在 2023/8/18 9:59:00 编辑过 |
关键字查询
相关文章
正在查询... |