首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 性能优化--优化数据库结构之优化数据大小

尽量减少表占用的磁盘空间。通常,执行查询期间处理表数据时,小表占用更少的内存。 表列 l 尽可能使用最效率(最小)的数据类型。比如,使用更小的整型以便于获取更小的表。...l 很有可能,一个很长的字符串列,拥有一个唯一的前缀,最好仅索引该前缀(语法支持,具体查看 Section 14.1.14, “CREATE INDEX Syntax”)。...索引越短,检索越快,不仅仅是因为其需要更少的磁盘空间,还因为在索引缓存中提供了更多的命中,进而减少磁盘搜索(disk seeks)。...l 不同表中用相同的数据类型声明携带相同信息的数据列,加快基于对应列的join速度。...l 尽量保持列名的简单,这样,可以跨越不同的表使用相同的名字,并简化join查询。比如,某个名为customer表中,使用列名 name ,而不是customer_name。

2.4K20

MYSQL 数据库结构优化

数据库结构优化 优化数据大小 使表占用尽量少的磁盘空间。减少磁盘I/O次数及读取数据量是提升性能的基础原则。表越小,数据读写处理时则需要更少的内存,同时,小表的索引占用也相对小,索引处理也更加快速。...如果经常使用不同的组合条件列查询,那么索引第一部分应该设置为所有可能条件组合交集最多的那个列。 对于存储较长字符串的列,如果列值特定长度前缀比较具有选择性,那么则比较适合设置前缀索引。...索引越短执行越快,不仅因为索引占用的空间更少,同时也提高了索引缓存命中率,从而减少了磁盘读取。 合理的分表,特别对于动态格式表。 不同表的相同的列设置相同的配置,以便于加快联合查询的速度。...使用简洁的列名。通用列名使用。同时也能简化查询语句。为了保持不同数据库服务器间的可移植性。考虑保持列名大小小于18个字符。 通常来说,保持数据的非冗余性(第三范式)。...当连续的主键物理上也临近存储,那么InnoDB 可以更快的查询和查询。 数值类型优先使用。 BLOB 类型优化 当需要排序包含文本数据的大对象列时,可以考虑首先压缩它。

7.5K51
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 后台开发面试题分享八

    count(列名) 只包括列名那一列,在统计结果的时候,会忽略列值为空的计数,即某个字段值为 NULL 时,不统计。这里的空不是指空字符串或者 0,而是表示 null。...执行效率上: 列名为主键,count(列名) 会比 count(1) 快; 列名不为主键,count(1) 会比 count(列名) 快; 如果表多个列并且没有主键,则 count(1) 的执行效率优于...在 MySQL 中不同存储引擎使用 B-Tree 索引的方式不尽相同,同样会影响数据库的性能,比如 MyISAM 引擎使用一种“前缀压缩”的技术,这样可以索引更小,并且 MyISAM 索引是通过索引到具体物理地址找到数据行的...查询类型可以使用 B-Tree 索引 B-Tree 索引在根据完整键值、键范围或者键前缀查找时性能比较好,这些只有在使用索引的最左前缀时有效(最左索引可能是 MySQL 的特列)。...String.valueof() 当转入的变量为 null 时,不会报错。 反射机制的优缺点? 静态编译 - 在编译时确定类型、绑定对象即通过。 动态编译 - 在运行时确定类型、绑定对象。

    88720

    Spring boot Mybatis-XML方式通用Mapper插件之MyBatis Geneator详解(六)

    对于某些驱动当schema或表名中包含SQL通配符时(例如,一个表名是MY_TABLE,有一些驱动需要将下划线进行转义)是必须的。默认值是false。...这是一个独立于数据库获取标识列中的值的方法。 重要: 只有当目标运行为MyBatis3时才会产生正确的代码。 如果与iBATIS2一起使用目标运行时会产生运行时错误的代码。...这对那些存在同一前缀的字段想在生成属性名时去除前缀的表非常有用。...如果列的名称中包含空格,MGB会自动添加分隔符, 所以这个重写只有当列名需要强制为一个合适的名字或者列名是数据库中的保留字时是必要的。...使用MBG生成的代码时,建议尽可能不要去修改自动生成的代码,而且要生成带有@mbggenerated,这样才不会在每次重新生成代码的时候需要手动修改好多内容。

    1.4K30

    彻底理解 MySQL 的索引机制,终于不再因为 MySQL 优化而被面试官鄙视了

    因为磁盘 IO 是非常昂贵的操作,所以计算机系统对此做了一些优化,当一次 IO 时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候...B+ Tree 的优点 查询单个元素: B+ 树中间节点不存储数据,因此同样大小的磁盘页可以存储更多的元素,当数据量相同的时候,B+ 树要比 B 树更加“矮胖”,因此 IO 次数更少 B 树查询时只要找到匹配的元素即可...最左前缀匹配原则 特性解释: 当 B+ 树的数据项是复合的数据结构,比如(name、age、sex)的时候,B+ 数是按照从左到右的顺序来建立搜索树的,比如当 (张三,20,F) 这样的数据来检索的时候...比如当 (张三,F) 这样的数据来检索时,B+ 树可以用 name 来指定搜索方向,但下一个字段 age 的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是 F 的数据了,这个是非常重要的性质...SELECT 语句尽量使用具体列代替 *** SELECT * 增加很多不必要的消耗(CPU、IO、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。

    2.2K21

    MySQL-进阶

    on tb_sku(sn); 然后再次执行相同的SQL语句,再次查看SQL的耗时 select * from tb_sku where sn = '1000000003410008'; 最左前缀法则...视图的检查选项 当使用with check option子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其故何视图定义。...代码的简写 not found:所有以02开头的sqlstate代码的简写 sqlexception:所有没有被sqlwarning或not found捕获的sqlstate代码的简写 三、存储函数...在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他) 对应SQL 锁类型 说明 lock tables xxx read...可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。

    1K20

    mysql索引类型 normal, unique, full text

    4.限制索引的数目 5.尽量使用数据量少的索引 6.尽量使用前缀来索引 7.删除不再使用或者很少使用的索引 一、 MySQL: 索引以B树格式保存   Memory存储引擎可以选择Hash或BTree...4、单列索引、多列索引:   多个单列索引与单个多列索引的查询效果不同,因为:   执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。   ...5、最左前缀(Leftmost Prefixing):多列索引,例如:fname_lname_age索引,以下的搜索条件MySQL都将使用   fname_lname_age索引:firstname,lastname...ADD INDEX 索引的名字 (列名1,列名2,...); (3)创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX 索引的名字 (列名1,列名...2,...) ); 2、唯一索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

    2.6K20

    MySQL 的索引查询以及优化技巧

    : MyISAM:MySQL的旧版本的默认引擎,它不支持事务和行级锁,允许开发人员手动控制表锁;支持全文索引;在崩溃后不能安全恢复;支持压缩表,这些表不能修改,但占用更少的空间,并且可以提高查询性能。...当表中某列字符串类型的数据长度差别较大时适合使用varchar。 char的实际占用空间是固定的,当表中字符串数据的长度相差无几或很短时适合使用chart类型。...需要注意的是:虽然varchar(5)和varchar(200)在存储“hello”这个字符串时使用相同的存储空间,但并不意味着将varchar的长度设置太大不会影响性能,实际上,MySQL的某些内部计算...创建前缀索引时选择前缀长度很重要,在不破坏原来数据分布的情况下尽可能选择较短的前缀。...索引不是万能的,当数据量巨大时,维护索引本身也是耗费性能的,应该考虑分区分表存储。

    1.2K00

    【重学 MySQL】十二、SQL 语言的规则与规范

    在MySQL中,数据库名、表名、列名(或字段名)在Windows环境下是大小写不敏感的,而在Linux环境下是大小写敏感的。推荐的做法是将数据库名、表名、列名等小写,而将SQL关键字、函数名大写。...总之,SQL语言的规则与规范是确保SQL语句正确执行、提高代码质量的重要基础。在编写SQL语句时,应严格遵守这些规则和规范,以提高代码的可读性、可维护性和执行效率。...布尔类型的字段可以使用is_作为前缀,后接动词过去分词,如is_active。 列名: 应具有描述性,能够反映列中的数据内容。 避免使用数据类型作为列名的一部分,如int_id。...其他注意事项 命名一致性:在整个数据库中,应保持命名的一致性。例如,如果某个表名采用了驼峰命名法(CamelCase),那么其他表名也应采用相同的命名法。...请注意,使用 source 命令时,MySQL 会读取并执行 SQL 文件中的每一条 SQL 语句。因此,请确保你的 SQL 文件是安全的,不包含任何可能对数据库造成损害的语句。

    13610

    Gorm 数据库表迁移与表模型定义

    蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间 如果您遵循 GORM 的约定,您就可以少写的配置、代码。...查看 GORM 配置 获取详情 4.3 列名(Column Name) 根据约定,数据表的列名使用的是 struct 字段名的 蛇形命名 type User struct { ID uint...,更新记录时,将该字段的值设为当前时间。...embedded 嵌入字段 embeddedPrefix 嵌入嵌入字段的字段列名前缀 autoCreateTime 跟踪当前时间创建时,对于'int'字段,它将跟踪unix秒,使用值'nano/'milli...与'index'相同,但创建唯一索引 check 创建检查约束, 如: check:age > 13, 参照 Constraints 的写入权限, <-:create 仅创建字段, <-

    43210

    mysql5.7 索引

    4.限制索引的数目 5.尽量使用数据量少的索引 6.尽量使用前缀来索引 7.删除不再使用或者很少使用的索引 一、 MySQL: 索引以B树格式保存    Memory存储引擎可以选择Hash...4、单列索引、多列索引:    多个单列索引与单个多列索引的查询效果不同,因为:    执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。    ...5、最左前缀(Leftmost Prefixing):多列索引,例如:fname_lname_age索引,以下的搜索条件MySQL都将使用    fname_lname_age索引:firstname...ADD INDEX 索引的名字 (列名1,列名2,...);  (3)创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX 索引的名字 (列名1,列名...  2,...) );  2、唯一索引  这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

    1.6K30

    MYSQL锁学习笔记

    前言 MYSQL是在大小公司中使用率极高的开源的关系型数据库,以其良好的易用性和在分布式场景下的高性能而著称,也是所有新手在数据库入门时的产品首选。...(Parser)负责解析并校验SQL语句 查询缓存(Query Cache)负责对执行过的SQL语句结果进行缓存,当发现有类似的查询请求命中缓存时,则会直接返回缓存中的查询结果。...Explain执行后生成的数据如下: 列名 含义 id SELECT语句的SQL_ID,它是指这个语句在查询中的第n条语句,如果两个id相同,则代表按照顺序执行从上到下执行,id值越大,优先级越高,越先被执行...for update, update, delete) 意向锁(IS/IX)表级别锁,当获得该表/行的共享/排他锁时,会对该表加上意向共享/排他锁。...读已提交REPEATABLE COMMIT级别下只有record lock MYSQL默认为RR 因此当判断语句如何加行锁时,需要根据事务隔离级别+是否使用主键/唯一键/索引进行判断。

    85520

    SQL优化

    ,那么在相同数据页中能放下的索引值也就越少,这就意味着搜索索引需要的查询时间也就越长,进而查询的效率就会降低,所以我们可以适当的选择使用前缀索引,以减少空间的占用和提高查询效率 比如,邮箱的后缀都是固定的...“@xxx.com”,那么类似这种后面几位为固定值的字段就非常适合定义为前缀索引 alter table test add index index2(email(6)); 复制代码 使用前缀索引,定义好长度...,就可以做到既节省空间,又不用额外增加太多的查询成本 需要注意的是,前缀索引也存在缺点,MySQL无法利用前缀索引做order by和group by 操作,也无法作为覆盖索引 查询具体的字段而非全部字段...,如果必须要使用 text 定义字段,可以把此字段分离成子表,需要查询此字段时使用联合查询,这样可以提高主表的查询效率 适当分表、分库策略 分表是指当一张表中的字段更多时,可以尝试将一张大表拆分为多张子表...当数据较好范式化时,修改的数据更少,而且范式化的表通常要小,可以有更多的数据缓存在内存中,所以执行操作会更快 缺点则是查询时需要更多的关联 第一范式:字段不可分割,数据库默认支持 第二范式:消除对主键的部分依赖

    76630

    MyBatis-Plus学习笔记(1):环境搭建以及基本的CRUD操作

    MyBatis-Plus是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,使用MyBatis-Plus时,不会影响原来Mybatis方式的使用。...private String email; private String phone; //get/set ... } MyBatis-Plus默认使用下划线命名到驼峰命名的映射规则来处理表和实体类类名以及表的列名和实体类字段的映射...当默认规则不适用时,则需要通过额外的配置来处理映射,如可以使用注解@TableName来指定表名,使用@TableId和@TableField来指定主键列和非主键列的列名。...当多数表具有相同的前缀或者相同的主键生成策略时,可以使用全局配置指定表前缀和主键策略,而无需一个个手动添加注解,当然少数特殊的还是可以通过注解的方式来指定,application.yml: mybatis-plus...xiaolan@qq.com"); user.setPhone("18700000000"); userMapper.insert(user); //插入成功时,

    40010

    利用mybatis-generator自动生成代码

    注意,classPathEntry只在下面这两种情况下才有效​ 当加载 JDBC 驱动内省数据库时 当加载根类中的 JavaModelGenerator 检查重写的方法时 ​因此,​如果你需要加载其他用途的...这是一个独立于数据库获取标识列中的值的方法。 重要: 只有当目标运行为MyBatis3时才会产生正确的代码。 如果与iBATIS2一起使用目标运行时会产生运行时错误的代码。...这对那些存在同一前缀的字段想在生成属性名时去除前缀的表非常有用。...如果列的名称中包含空格,MGB会自动添加**分隔符**, 所以这个重写只有当列名需要强制为一个合适的名字或者列名是数据库中的保留字时是必要的。...使用MBG生成的代码时,建议尽可能不要去修改自动生成的代码,而且要生成带有​​@mbggenerated​​,这样才不会在每次重新生成代码的时候需要手动修改好多内容。

    43820

    原 荐 MySQL-性能优化-优化设计和设计

    MySQL-性能优化-优化设计和设计原则 MySQL性能优化目的 如何合理的设计数据库? 什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异?...,数据库系统用DBMS统一管理和控制数据; (4)文件系统实现以文件为单位的数据共享,数据库系统实现以记录和字段为单位的数据共享。...,外键表中的记录是没有删除的,这样对于数据库的数据是很容易混乱的,不便于维护,那我要是使用的是强外键的方式,这样直接删除主键记录,没有删除外键表中的记录,这样是要报错的,这样容易找到代码上的问题,外键的设计能对于数据完整性有一个好的约束...(九)选择数据类型 (十)优化并行 设计DB时就应该考虑到对并行进行优化,比如,timestamp类型。...命名规则 表名规则 1、要用前缀,但不要用无意义的前缀 2、下划线分隔 3、全小写 列名规则 1、一般不用前缀(当和关键词冲突的可以考虑加前缀区别) 2、下划线分隔 3、全小写 不管是表名设计还是列名设计

    71640

    mysql操作命令梳理(1)-索引

    基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。...Mysql索引主要有两种结构:hash和B+树: hash:hsah索引在mysql比较少用,他以把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快.当时因为是hash结构,每个键只对应一个值...组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。...(主键原则上是唯一的,别被唯一值所困扰。) 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。...举一个简单的例子 主键A跟主键B组成联合主键 主键A跟主键B的数据可以完全相同(困扰吧,没关系),联合就在于主键A跟主键B形成的联合主键是唯一的。

    1.2K60

    小白学习MySQL - 索引键长度限制的问题

    最近在工作中,碰到了个很诡异的问题,需求是在两个MySQL数据库为同一张表增加一个二级索引(单键值字段(x varchar(500))),表结构和加索引的语法,都是相同的,但是一个库执行成功了,一个执行失败了...、BLOB),前缀会按照字节个数计算,因此,当对非二进制的字符串列明确前缀长度的时候,需要考虑多字节字符集的因素, P.S. https://dev.mysql.com/doc/refman/5.6...如果用的是InnoDB,前缀上限是767字节,当启用innodb_large_prefix时,上限可以达到3072字节。如果用的是MyISAM,前缀上限是1000字节。...之所以可以定义一个字段前缀作为键值,存储效率是考虑的一个因素,如果列名的前10个字符通常都是不同的,检索这10个字符创建的索引应该会比检索整个列作为索引的效率更高,使用列前缀作为索引会让索引树更小,不仅节省空间...再看一下《MySQL 5.7 Reference Manual》,相同章节中,多了这段描述,是说当使用CREATE INDEX时,如果指定的索引前缀长度超过了列定义的长度上限,则会出现以下两种场景, 非唯一索引

    3.4K30

    MySQL 性能优化,优化设计及设计原则解读

    ; (3)文件系统用操作系统中的存取方法对数据进行管理,数据库系统用DBMS统一管理和控制数据; (4)文件系统实现以文件为单位的数据共享,数据库系统实现以记录和字段为单位的数据共享。...,外键表中的记录是没有删除的,这样对于数据库的数据是很容易混乱的,不便于维护,那我要是使用的是强外键的方式,这样直接删除主键记录,没有删除外键表中的记录,这样是要报错的,这样容易找到代码上的问题,外键的设计能对于数据完整性有一个好的约束...在设计数据库的时候应当落实如下的原则 (一)降低对数据库功能的依赖(如在业务上使用了MySQL特性,且这个特性是只有MySQL存在的,对以后的数据库迁移会带来很大的麻烦) (二)定义实体关系的原则...(九)选择数据类型 (十)优化并行 设计DB时就应该考虑到对并行进行优化,比如,timestamp类型。...命名规则 表名规则 1、要用前缀,但不要用无意义的前缀 2、下划线分隔 3、全小写 列名规则 1、一般不用前缀(当和关键词冲突的可以考虑加前缀区别) 2、下划线分隔 3、全小写 不管是表名设计还是列名设计

    83931

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券