文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL高性能索引策略和查询性能优化

2017-05-17 05:26

关注

MySQL高性能索引策略和查询性能优化

前缀索引和索引选择性

有时候需要索引很长的字符,这会让索引变得大且慢。一个策略是模拟哈希索引

通常可以索引开始的部分字符,这样可以大大解约索引空间,提高索引效率。但这样会降低索引的选择性。

索引的选择性:不重复的索引值(也成为基数)和数据表的记录总数比值。索引的选择性越高则查询效率越高,因为选择性高的索引可以在查找时过滤更多的行。唯一索引的选择性为1,是选择性最好的。

前缀索引是一种能使索引更小更快的办法,但也有缺点:

MySQL无法使用ORDER BY和GROUP BY,也无法使用覆盖扫描。

聚簇索引

聚簇索引并不是一种单独的索引类型,是一种数据存储方式。

当表有聚簇索引时,它的数据行实际上存放在索引的叶子页。

聚簇:数据行和相邻的键值紧凑的存储在一起。

如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。

如果没有这样的索引,会隐式定义一个主键作为聚簇索引。

聚簇索引的缺点

覆盖索引

通常大家会根据查询的WHERE条件创建合适的索引,设计优秀的索引也可以使用索引来直接获取列的数据。

如果索引的叶子结点已经包含要查询的数据,那还要什么必要再回表查询呢?如果一个索引包含所有需要查询的字段的值,我们称之为“覆盖索引”。
image

延迟关联

使用inner join做子查询。在查询的第一个阶段可以使用覆盖索引。虽然无法使用索引覆盖整个查询,但比完全无法利用索引覆盖的好。

冗余和重复索引

索引越大越多,插入数据越慢。

可以使用Percona Toolkit中的pt-duplicate-key-checker分析表结构找出冗余的索引。

单表建多少个索引才合适?

  • 大表,主键有一个唯一索引。再有一到两个组合索引,最多三个索引足够用了。

  • 索引数量不能超过4个/表。

  • 一切服从应用需要。在一张表上创建多少索引,创建什么样的索引,并无一定之规。不能说一张表上有了 7个索引,就不能再创建第 8个索引了。

  • 索引的多少取决于具体的业务场景。

  • 在oltp中,表经常需要insert等,那么索引不能过多,一般超过3个就会对性能有影响。

  • 在olap中如果表只是用于查询,那么建多个索引也无妨。

索引和锁

索引可以让查询锁定更少的行。但是,如果索引无法过滤掉无效的行,那么在InnoDB检索到数据并返回给服务器层以后,MySQL才能用那个用WHERE子句,这时已经无法避免锁定行了:InnoDB已经锁定了这些行。

mysql> select actor_id from sakila.actor where actor_id < 5 and actor_id <> 1 for update;

虽然这条查询返回的是2,3,4,但是实际上获取了1-4的排他锁。

话句话说,存储引擎的操作是“找小于5的记录”,服务器并没有告诉InnoDB可以过滤第1行的WHERE条件。注意到EXPLAIN的Extra列出现了“Using where”,这表示MySQL将存储引擎返回行以后再应用WHERE过滤条件。

using where 代表MYSQL服务器层在存储引擎层返回行以后再应用WHERE过滤条件

查询性能优化

对于性能低下的查询,通过两个步骤来分析非常有效:

确认应用程序是否在检索大量超过需要的数据。这意味着访问了过多的行或者是过多的列。

确认MySQL服务器层是否在分析大量超过需要的数据行。

Re

《高性能MySQL》

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯