mysql索引规则

本文介绍了MySQL中索引使用的最佳实践,包括最左前缀匹配原则、=与in操作符的灵活运用、选择高区分度的列作为索引、避免在索引列上进行计算以及尽可能扩展现有索引而非新建等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可
### MySQL 索引命名规范的最佳实践 对于MySQL中的索引,遵循一定的命名规范可以显著提升数据库设计的清晰度和可维护性。具体来说: - **主键索引**应命名为`pk_字段名`,这有助于快速识别哪个字段被设为主键[^1]。 - 对于**唯一索引**,建议采用`uk_字段名`的形式进行命名,表明此索引下的值在整个表中必须独一无二。 - 当涉及到普通的辅助索引时,则应该使用`idx_字段名`这样的模式来定义其名字,方便区分不同类型的索引并理解它们的作用对象。 除了上述基本规则外,在实际应用中还可以考虑加入更多细节到索引的名字里以便更好地描述索引特性: - 使用前缀如`idx_`或者`index_`标记这是一个索引; - 将关联的**表名**纳入索引名称之中,比如`idx_tableName_columnName`,这样能一眼看出索引属于哪张表格; - 如果是多列组合成的一个复合索引,应当依次列出所涉及的所有**列名**,像`idx_table_column1_column2`一样; - 可选地注明索引的数据结构类型(例如BTree),即`idx_table_column_BTree`; - 若某个索引专门为实现某种特殊查询逻辑服务的话,也可以把这部分意图体现在名称上,如`idx_table_column_search`或`idx_table_column_unique`[^2]。 通过严格遵守这些详细的命名指导原则,不仅可以让团队成员之间的协作更加顺畅高效,而且也使得后续对数据库架构的理解变得简单明了。 ```sql -- 创建主键索引的例子 ALTER TABLE example ADD PRIMARY KEY (id); -- 添加唯一索引实例 CREATE UNIQUE INDEX uk_username ON users(username); -- 定义普通索引示范 CREATE INDEX idx_user_email ON users(email); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值