MySQL 索引

几乎所有的索引都是建立在字段之上.

索引: 系统根据某种算法, 将已有的数据(未来可能新增的数据),单独建立一个文件: 文件能够实现快速的匹配数据, 并且能够快速的找到对应表中的记录. 

索引的意义

  1. 提升查询数据的效率

  2. 约束数据的有效性(唯一性等)

增加索引的前提条件: 索引本身会产生索引文件(有时候有可能比数据文件还大) ,会非常耗费磁盘空间.

如果某个字段需要作为查询的条件经常使用, 那么可以使用索引(一定会想办法增加);

如果某个字段需要进行数据的有效性约束, 也可能使用索引(主键,唯一键)

 

Mysql中提供了多种索引

  1. 主键索引: primary key

  2. 唯一索引: unique key

  3. 全文索引: fulltext index

  4. 普通索引: index

  5. 外键索引: foreign key

  6. 复合索引:key (最左前缀原则)

 

全文索引: 针对文章内部的关键字进行索引

全文索引最大的问题: 在于如何确定关键字

英文很容易: 英文单词与单词之间有空格

中文很难: 没有空格, 而且中文可以各种随意组合(分词: sphinx)

 

什么情况下有索引,但用不上

  1. 条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

  2. 对于多列索引,第一个索引没有使用,则不会使用索引。例如索引是key index (a,b,c). 可以是a | a,b| a,b,c 3种组合进行查找,但使用b,c不会使用索引。

  3. like查询是以%或 _开头不会使用,% 或 _可以放在后面。

  4. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。

  5. where 子句里对索引列上有数学运算,用不上索引。

  6. where 子句里对有索引列使用函数,用不上索引。

  7. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

  8. 避免在索引字段上使用函数,否则会导致查询时索引失效。
 
相关文章:  
posted @   柔和的天空  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示