博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我设计Mysql索引的原则
阅读量:6516 次
发布时间:2019-06-24

本文共 1167 字,大约阅读时间需要 3 分钟。

hot3.png

  1. 搜索的索引列,不一定是所要选择的列。换句话说,最适合索引的列是出现在WHERE 子句中的列,或连接子句中指定的列,而不是出现在SELECT 关键字后的选择列表中的列。

  2. 使用惟一索引。考虑某列中值的分布。对于惟一值的列,索引的效果最好,而具有多个重复值的列,其索引效果最差。例如,存放年龄的列具有不同值,很容易区分各行。而用来记录性别的列,只含有“ M”和“F”,则对此列进行索引没有多大用处(不管搜索哪个值,都会得出大约一半的行)

  3. 使用短索引。如果对串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做。例如,如果有一个CHAR(200) 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。对前10 个或20 个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘I/O 较少,较短的值比较起来更快。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此,MySQL也可以在内存中容纳更多的值。这增加了找到行而不用读取索引中较多块的可能性。(当然,应该利用一些常识。如仅用列值的第一个字符进行索引是不可能有多大好处的,因为这个索引中不会有许多不同的值。)

  4. 利用最左前缀。在创建一个n 列的索引时,实际是创建了MySQL 可利用的n 个索引。多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列集称为最左前缀。(这与索引一个列的前缀不同,索引一个列的前缀是利用该的前n 个字符作为索引值。)

  5. 不要过度索引。不要以为索引“越多越好”,什么东西都用索引是错的。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能,这一点我们前面已经介绍过。在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。如果有一个索引很少利用或从不使用,那么会不必要地减缓表的修改速度。此外,MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余的索引给查询优化带来了更多的工作。索引太多,也可能会使MySQL 选择不到所要使用的最好索引。只保持所需的索引有利于查询优化。如果想给已索引的表增加索引,应该考虑所要增加的索引是否是现有多列索引的最左索引。如果是,则就不要费力去增加这个索引了,因为已经有了。

  6. 考虑在列上进行的比较类型。索引可用于“ <”、“ < = ”、“ = ”、“ > =”、“ >”和BETWEEN 运算。在模式具有一个直接量前缀时,索引也用于LIKE 运算。如果只将某个列用于其他类型的运算时(如STRCMP( )),对其进行索引没有价值。

本文出自tracywxh的专栏( ),转载请注明出处!

转载于:https://my.oschina.net/liuh1988/blog/781761

你可能感兴趣的文章
[LeetCode]Subsets II生成组合序列
查看>>
只针对中英文混合分词的中文分词器
查看>>
Spring mvc学习指南
查看>>
配置sonar、jenkins进行持续审查
查看>>
Dubbo接口压测
查看>>
编程到底有多难?看看普通人买苹果和程序员买苹果就知道了
查看>>
技术人暑期「游学」图鉴
查看>>
澳鱼类大规模死亡 河面漂满鱼尸引发生态灾难担忧
查看>>
凭借《独家记忆》走红 张超:步入30岁时的礼物
查看>>
贵州2019年拟招商引资5000亿元 引进优强企业千家以上
查看>>
新疆“画家村”打“旅游牌”:村民靠“文化”走上致富路
查看>>
暖心!C罗让小球迷坐桌子上为其签名
查看>>
若英国“脱欧”协议未通过议会 将发生什么?
查看>>
全世界加速最快量产车,道奇Challenger SRT Demon渲染图
查看>>
云计算时代,如何选择适合自己的云服务器厂商?
查看>>
Flutter进阶 | Flutter 优质练手项目以及优质插件
查看>>
SpringBoot结合LogBack打印Sql
查看>>
忘了Python关键语句?这份备忘录拯救你的记忆
查看>>
诺贝尔奖得主Paul Krugman‏认可BCH发展路线
查看>>
Uirush | 免费的设计开发素材库网站
查看>>