返回顶部
首页 > 资讯 > 数据库 >MySQL 隔离数据列和前缀索引的使用总结
  • 190
分享到

MySQL 隔离数据列和前缀索引的使用总结

MySQL隔离数据列MySQL前缀索引 2022-05-20 14:05:59 190人浏览 泡泡鱼
摘要

目录隔离数据列前缀索引和索引的选择性隔离数据列 通常,我们会发现查询语句会妨碍Mysql使用索引。除非在查询语句中列是独立的,否则mysql不会使用这些列的索引。“隔离”的意思是索引列不应该成为表达式的一部分或者在

目录
  • 隔离数据列
  • 前缀索引和索引的选择性

隔离数据列

通常,我们会发现查询语句会妨碍Mysql使用索引。除非在查询语句中列是独立的,否则mysql不会使用这些列的索引。“隔离”的意思是索引列不应该成为表达式的一部分或者在一个查询函数体中。例如下面的例子就不会命中actor_id这个索引。


SELECT `actor_id` FROM `actor` WHERE `actor_id` + 1 = 2;

对于人来说,很容易知道查询条件实际是actor_id = 4,但是Mysql不会这么处理,因此养成简化WHERE判决条件的习惯,这意味着索引列独立地在比较操作符的一侧。下面是另外一个普遍错误的案例:


SELECT ... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10;

前缀索引和索引的选择性

有时候需要在很长字符的列上建立索引,但这样会导致索引占据的空间很大且查询变慢。一个策略是使用哈希索引模拟,但有时候这未必是足够好,这个时候该怎么做?

通常是可以将索引列前面的部分字符建立索引来替换全字段索引提高性能和节省空间。但这种方式会使得选择性变差。索引的选择性是指独立的索引值筛选出的数据占整个数据集合的比例。高选择性的索引可以让MySQL过滤掉更多无关的数据。例如,一个唯一索引的选择性是1。 列的前缀通常在选择性方面已经能够提供足够好的性能。如果使用BLOB或TEXT或非常长的VARCHAR字段列,你必须定义前缀索引,以为MySQL不允许做全长度索引。

你需要在使用更长的前缀以获得更好的选择性和足够短的前缀以节省存储空间之间平衡。为了确定一个合适的前缀长度,查找出最高频的值,然后和最频繁的前缀进行比较。例如以城市数据表为例,我们可以使用如下的语句统计:


SELECT COUNT(*) as cnt, `name` FROM `common_city` GROUP BY `name` ORDER BY cnt DESC LIMIT 10

可以看到这些城市名称出现的次数比较多。现在我们可以使用1个字的前缀查找最为频繁的城市名称前缀。


SELECT COUNT(*) as cnt, LEFT(`name`, 1) as pref FROM `common_city` GROUP BY pref ORDER BY cnt DESC LIMIT 10

可以看到1个字找出来的数据集更多了,这会导致独立选中的机会越少,因此需要调整一下前缀的长度。例如调到3个字。


SELECT COUNT(*) as cnt, LEFT(`name`, 3) as pref FROM `common_city` GROUP BY pref ORDER BY cnt DESC LIMIT 10

可以看到这和全长度的相差不多,那实际三个字的前缀就够了(原文使用的是英文城市数据表,字符会更多)。另外一种方式是使用不同长度的前缀数量与全字段数量的比例评估多少合适。例如:


SELECT 
  COUNT(DISTINCT LEFT(`name`, 1)) / COUNT(`name`) as pref1, 
  COUNT(DISTINCT LEFT(`name`, 2)) / COUNT(`name`) as pref2, 
  COUNT(DISTINCT LEFT(`name`, 3)) / COUNT(`name`) as pref3, 
  COUNT(DISTINCT LEFT(`name`, 4)) / COUNT(`name`) as pref4 
FROM `common_city`

数值越接近于1效果越好,但是也可以看到,随着前缀长度的加长改善的空间越小。只看平均值并不是一个好主意,还需要检查一下最坏情况。也许会觉得3-4个字足够了,但是如果数据分布很不均匀,那可能会存在陷阱。因此还需要检查一下前缀少的是不是存在一个前缀对应的数据与其他相比极其多的情况。最后可以给指定的列加前缀索引。


ALTER TABLE `common_city` ADD KEY (name(3));

前缀索引在节省空间和提高效率方面表现不错,但是也有缺陷,那就是在ORDER BY和GROUP BY上无法使用索引(实际验证在MySQL 5.7以上版本也有用)。另外一种常见的场景是在较长的十六进制字符串中,例如存储的sessionId,取前8位前缀做索引将过滤很多无关数据,效果很好。

以上就是MySQL 隔离数据列和前缀索引的使用总结的详细内容,更多关于MySQL 隔离数据列和前缀索引的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 隔离数据列和前缀索引的使用总结

本文链接: https://lsjlt.com/news/10337.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL 隔离数据列和前缀索引的使用总结
    目录隔离数据列前缀索引和索引的选择性隔离数据列 通常,我们会发现查询语句会妨碍MySQL使用索引。除非在查询语句中列是独立的,否则MySQL不会使用这些列的索引。“隔离”的意思是索引列不应该成为表达式的一部分或者在...
    99+
    2022-05-20
    MySQL 隔离数据列 MySQL 前缀索引
  • MySQL中前缀索引的优势和用法
    MySQL中前缀索引的优势和用法 在MySQL数据库中,索引是提高查询效率的重要手段之一。除了常见的全字段索引外,还有一种特殊的索引叫做前缀索引。本文将介绍前缀索引的优势和用法,并附上...
    99+
    2024-03-14
    mysql 优势 前缀索引
  • 使用前缀索引对MySQL优化的方法
    下文给大家带来有关使用前缀索引对MySQL优化的方法内容,相信大家一定看过类似使用前缀索引对MySQL优化的方法的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完你一定会有所收获。1.查看表...
    99+
    2024-04-02
  • MySQL null值字段是否使用索引的总结
    null和not null索引失效与否主要与表中字段的设立有关系,分为相应的两种情况,当对不能是null的字段使用索引时,条件无论是null或者not null 索引都失效,当对能是null的字段使用索引...
    99+
    2024-04-02
  • mysql索引数据结构一般如何使用
    下文主要给大家带来mysql索引数据结构一般如何使用,希望这些内容能够带给大家实际用处,这也是我编辑mysql索引数据结构一般如何使用这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。  &...
    99+
    2024-04-02
  • Oracle中B-Tree、Bitmap和函数索引使用案例总结
    目录 一、索引简介 1、索引是一个独立的数据库对象,和数据表table一样。在Oracle中,数据库对象object都是通过段segment结构表示。我们在数据字典dba_seg...
    99+
    2024-04-02
  • 【从删库到跑路 | MySQL总结篇】索引的详细使用
    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论...
    99+
    2023-12-23
    mysql android 数据库
  • 怎么合理的使用MySQL索引结构和查询
    这篇文章主要讲解了“怎么合理的使用MySQL索引结构和查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么合理的使用MySQL索引结构和查询”吧!一、高性...
    99+
    2024-04-02
  • 如何使用Java和NPM来实现高效的数据结构索引?
    在当今的信息时代,数据处理和管理已经成为各种企业和组织不可或缺的部分。在数据处理中,数据结构是非常重要的一部分。数据结构的好坏,直接决定了数据处理的效率和质量。而在数据结构中,索引也是非常重要的一部分。索引可以大大提高数据的查找效率,缩短查...
    99+
    2023-09-23
    索引 npm leetcode
  • Python和Unix的完美结合:如何使用框架索引您的数据
    Python和Unix都是非常强大的工具,它们各自都有着独特的优势。Python是一种高级编程语言,具有易读易写的特点,可以让用户快速地编写脚本和应用程序。而Unix则是一种操作系统,具有强大的命令行工具和管道机制,可以让用户快速地处理文...
    99+
    2023-11-05
    索引 unix 框架
  • MySQL数据库索引的弊端及怎么使用
    本篇内容介绍了“MySQL数据库索引的弊端及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合理利用索引在工作中,我们可能判断数据表中...
    99+
    2023-06-21
  • MySQL数据库索引的弊端及合理使用
    目录合理利用索引1.普通索引的弊端2.主键索引的陷阱3.联合索引的矛与盾4.前缀索引的短小精悍5.唯一索引的快与慢6.不要盲目加索引7.索引失效那些事索引优化1.changebuff...
    99+
    2024-04-02
  • MySQL进阶篇(03):合理的使用索引结构和查询
    一、高性能索引 1、查询性能问题 在MySQL使用的过程中,所谓的性能问题,在大部分的场景下都是指查询的性能,导致查询缓慢的根本原因是数据量的不断变大,解决查询性能的最常见手段是:针对查询的业务场景,设计合理的索引结构。 2、索引使用原则 ...
    99+
    2015-01-10
    MySQL进阶篇(03):合理的使用索引结构和查询
  • 使用MySQL索引如何快速检索数据库的案例
    这篇文章将为大家详细讲解有关使用MySQL索引如何快速检索数据库的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、索引的概念1、索引是一个排序的列表,在这个列表中存...
    99+
    2024-04-02
  • mysql索引数据结构要用B+树的原因是什么
    这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
    99+
    2023-06-30
  • MySQL数据库索引和事务的作用是什么
    本篇内容主要讲解“MySQL数据库索引和事务的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库索引和事务的作用是什么”吧!1. 索引1.1 概念索引是为了加速对表中数据行...
    99+
    2023-06-22
  • 如何在Mysql数据库中使用视图、事务和索引
    今天就跟大家聊聊有关如何在Mysql数据库中使用视图、事务和索引,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。视图是对若干张基本表的引用,一张虚表,...
    99+
    2024-04-02
  • 如何使用Java快速创建和维护高效的索引数据结构?
    在现代软件开发中,数据结构是非常重要的一部分。一个好的数据结构可以使得程序在处理大量数据时更加高效,而索引数据结构则是其中的一种。在本文中,我们将会介绍如何使用Java快速创建和维护高效的索引数据结构。 一、什么是索引数据结构? 索引数据...
    99+
    2023-09-23
    索引 npm leetcode
  • MySql数据库日常设计和使用需要注意的几点总结
        a,UTF-8的字符集是⼀一个汉字3个字节:varchar(255) UTF-8 255*3=765字节     b,禁⽌在表中建立预留字段     c,尽量避免加⼊外键约束,因为外键写...
    99+
    2021-02-15
    MySql数据库日常设计和使用需要注意的几点总结
  • 一文了解mysql索引的数据结构为什么要用B+树
    目录1. Hash表?No2. 二叉查找树(BST)?No3. 红黑树?No4. 平衡二叉树(AVL)?差那么二点意思5. B-tree(B-树也称B树)?差那么一点意思6. B+树...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作