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

【说站】mysql索引规范的整理

mysql索引规范的整理 1、建议将单张表索引数控制在5个以内。 2、组合索引字段数不建议超过5个。 3、join禁止超过三个表。 需要join的字段,数据类型必须绝对一致。...4、严禁左模糊或全模糊,如需要用搜索引擎解决。 5、如果有orderby场景,请注意索引的有序性。 实例 1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。...2)ref 指的是使用普通的索引(normal index)。 3)range 对索引进行范围检索。...反例:explain 表的结果,type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫。...以上就是mysql索引规范的整理,希望对大家有所帮助。更多mysql学习指路:Mysql 收藏 | 0点赞 | 0打赏

63110

MySQL 使用规范 —— 如何建好字段和索引

这包括;库表创建规范、字段的创建规范索引的创建规范以及SQL使用的相关规范,通过这些内容的讲解,让读者更好使用 MySQL 数据库,创建出符合规范的表和字段以及建出合适的索引。...road_map_5.6.sql road_map_8.0.sql 一、案例背景 此案例背景定位于使用使用一个简单的订单表,来讲解 MySQL 使用的相关规范。...包括;表的引擎、命名约束、字段长度、金额类型、更新时间、索引字段、组合索引等内容,方便大家学习以后,可以基于这些字段的规范演示讲解,在自己创建库表的时候有个参考对照,尽可能创建出性能更佳的库表和索引。...如下; 如上所列规范包括:建表相关规范、字段相关规范索引相关规范、使用相关规范。 1. 建表相关规范 库名、表名、字段名,使用小写和下划线 _ 分割 库名、表名、字段名,不超过12个字符。...因为alter table会产生表锁,期间阻塞对于该表的所有写入 SELECT语句必须指定具体字段名称,禁止写成 “*”select * 会将不需要读的数据也从MySQL里读出来,造成网卡压力,数据表字段一旦更新

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

    Oracle删除索引规范

    与用户沟通,虽然变更中删除索引的需求很少,但也存在此类需求。 本文从数据库层面,旨在尽可能避免类似问题发生,制定删除索引的变更规范。...2.索引删除规范 若确认需要做索引删除,可以使用Oracle提供的两个功能特性协助判断删除索引是否会有隐患。...演示案例: create table T as select * from dba_objects; create index IDX_T_01 on T(object_id); 假设要删除的索引名称是...一般原则是首先评估删除冗余索引,比如某张表同时有两个索引索引A是c1列,索引B是c1,c2两列的复合索引,则一般可以选择删除索引A;但需要注意,如果索引B是c2和c1列的复合索引,就通常不可以删除索引...其次,对其他计划删除的索引可以按照上文的规范来评估和操作。

    1.4K30

    MySQL规范

    数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql的保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要做到见名识意...,但可以存放他们的路径或者地址 禁止做线上的数据库压力测试 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1、优先选择符合存储需要的最小的数据类型 原因 列的字段越大,建立索引时所需要的空间也就越大...TEXT或BLOB类型只能使用前缀索引 因为MySQL索引字段长度是有限制的,所以TEXT类型只能使用前缀索引,并且TEXT列上是不能有默认值的。...索引设计规范 限制每张表上的索引数量,建议单张不超过5个 禁止给表中的每一列都建立单独的索引 每个Innoodb表必须有个主键 常见索引列建议 1、出现在SELECT、UPDATE、DELETE...索引set规范 尽量避免使用外键约束 1、不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 2、外键可用于保证数据的参照完整性,但建议在业务端实现; 3、外键会影响父表和子表的写操作从而降低性能

    1.3K20

    mysql 前缀索引_MySQL前缀索引

    有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。...前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。...前缀索引的选择性 使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。...MySQL 无法使用前缀索引做 ORDER BY 和 GROUP BY , 也无法使用前缀索引做覆盖扫描。...后缀索引 MySQL 没有提供后缀索引,事实上,一些业务场景对后缀匹配选择性更高,比如我曾经参与过的项目,手机的入网标示imei号,前缀都是86等固定的国家编号开头,这个时候可以将字符反转后存储,就可以建立选择性较高的前缀索引

    4.8K30

    MySQL和Oracle在索引名称唯一性方面的不同设计

    最近碰到要删除一个MySQL数据库索引的需求,按照Oracle的思维,"drop index index_name"会提示错误,MySQL删除索引,有两种形式, (1) 使用DROP INDEX语句 语法格式...一个表只有一个主键,主键也是一个索引。 DROP INDEX index_name:表示删除名称为 index_name 的索引。...猜想一下,之所以在MySQL中不支持"drop index index_name"的操作,应该是说index_name不能唯一标识一个索引,很容易进行验证,在如下这两张表上各创建一个同名的索引,这是可行的...id); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 从数据字典可以看到,确实两张表,有相同名称索引...并不是通过索引名称唯一标识一个索引的,而在Oracle中,创建一个同名的索引,就会提示ORA-00955, SQL> create index idx_01 on a(object_id); create

    95740

    mysql前缀索引使用,Mysql:前缀索引索引

    可以像普通索引一样使用mysql前缀索引吗?...解决方法: 如果你想一下,MySQL仍会给你正确的答案,即使没有索引…它只是不会那么快……所以,是的,你仍然会得到一个正确的答案前缀索引....前缀索引的排序不超出前缀的长度.如果您的查询使用完整索引来查找行,您通常会发现返回的行是按索引顺序隐式排序的.如果您的应用程序需要这种行为,那么它当然会期待它不应该期望的东西,因为除非您显式ORDER...并且,前缀索引不能用作覆盖索引.覆盖索引是指SELECT中的所有列恰好包含在一个索引中的情况(加上可选的主键,因为它也总是存在).优化器将直接从索引读取数据,而不是使用索引来标识要在主表数据中查找的行....标签:mysql,indexing,innodb 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142503.html原文链接:https://javaforall.cn

    5.3K20

    Mysql覆盖索引_mysql索引长度限制

    只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。...(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询) 覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql...当发起一个索引覆盖查询时,在explain的extra列可以看到using index的信息 覆盖索引的坑:mysql查询优化器会在执行查询前判断是否有一个索引能进行覆盖,假设索引覆盖了where条件中的字段...如上图则无法使用覆盖查询,原因: 1.没有任何索引能够覆盖这个索引。因为查询从表中选择了所有的列,而没有任何索引覆盖了所有的列。 2.mysql不能在索引中执行LIke操作。...mysql能在索引中做最左前缀匹配的like比较,但是如果是通配符开头的like查询,存储引擎就无法做比较匹配。

    7.9K30

    MySQL开发规范

    一、命名规范 库名、表名、字段名必须使用小写字母并采用下划线分割; 库名、表名、字段名禁 止超过32个字符,须见名知意; 库名、表名、字段名支持最多64个字符,统一规范、易于辨识以及减少传输量不要超过...32; 库名、表名、字段名禁止使用MySQL保留关键字; 临时库、临时表名必须以tmp为前缀并以日期为后缀; 备份库、备份表名必须以bak为前缀并以日期为后缀; 二、基本规范 使用...避免二次分表,二次分表的难度和成本较高 按日期时间分表需符合YYYY[MM][DD][HH]格式 采用合适的分库分表策略,如千库十个表、十库百表等 单表字段数控制在20个以内 四、索引设计规范...等 让数据库做最擅长的事 降低业务耦合度,为sacleout、shading留点余地 避开BUG 避免使用大表的join MySQL最擅长的是单表的主键/二级索引查询 Join消耗较多的内存...,产生临时表 避免在数据库中进行数学运算 容易将业务逻辑和DB耦合在一起 MySQL不擅长数学运算和逻辑判断 无法使用索引 减少与数据库的交互次数 Insert…on duplicate

    82810

    MySQL开发规范

    一、基础规范 1)    使用InnoDB存储引擎 2)    数据库字符集使用UTF8,校对字符集使用utf8_general_ci 3)    所有表、字段都尽量添加注释 4)    库名、表名、字段名使用小写字母...,禁止超过32个字符,须见名知意 5)    非唯一索引以 “idx_字段1_字段2” 命名,唯一索引必须以 “uniq_字段1_字段2” 命名 二、查询规范 1)    SQL语句尽可能简单,大的SQL...IN 10)    Where字句中同一个表的不同字段组合建议小于5组(否则考虑分表) 11)    禁止单条语句同时更新多个表 12)    事务要尽量简单,整个事务的时间长度不要太长 三、表设计规范...) 6)    表必须有主键,不使用更新频繁的列做主键、尽量不使用字符串列做主键,尽量使用非空的唯一自增键做主键 四、索引设计规范 1)    单表索引数量不超过10个 2)    单个字段不要超过两个索引...(参与了运算的列不会引用索引) 8)    复合索引须符合最左前缀的特点建立索引mysql使用复合索引时从左向右匹配) 9)    重要的SQL中where条件里的字段必须被索引 10)    Where

    1.4K00

    MySQL 开发规范

    所有的数据库对象名称必须使用小写字母并用下划线分割(MySQL大小写敏感,名称要见名知意,最好不超过32字符)禁止在数据中存储图片,文件二进制数据(使用文件服务器)禁止在线上做数据库压力测试禁止从开发环境...)使用timestamp或datetime类型来存储时间同财务相关的金额数据,采用decimal类型(不丢失精度,禁止使用 float 和 double)所有的数据库对象名称禁止使用MySQL保留关键字临时库表必须以...字符集必须统一,避免由于字符集转换产生的乱码,汉字utf8下占3个字节)所有表和字段都要添加注释COMMENT,从一开始就进行数据字典的维护建议使用物理分表的方式管理大数据尽量做到冷热数据分离,减小表的宽度(mysql...(禁止使用物理外键,建议使用逻辑外键)尽量使用 union all 代替 union拆分复杂的大SQL为多个小SQL( MySQL一个SQL只能使用一个CPU进行计算)对于程序连接数据库账号,遵循权限最小原则超过三个表禁止...在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。

    49820

    mysql开发规范

    命名规范 库名、表名、字段名必须使用小写字母,并采用下划线分割 库名、表名、字段名禁用超过32个字符。...须见名知意 库名、表名、字段名禁用使 MySQL保留字 临时库、表名必须以tmp为前缀,并以日期为后缀 备份库、表必须以bak为前缀,并以日期为后缀 基础规范 使用INNODB存储引擎 表字符集使用utf8mb4...UNSIGNED存储非负整数 INT类型固定占用4字节存储 使用timestamp存储时间 使用INT UNSIGNED存储IPV4 使用VARBINARY存储大写敏感的变 字符串 禁用在数据库中存储明文密码 索引规范...索引的用途 去重 加速定位 避免排序 覆盖索引 索引数量控制 单张表中索引数量不超过5个 单个索引中的字段数不超过5个 对字符串使用前缀索引,前缀索引长度不超过8个字符 建议优先考虑前缀索引,必要时可添加伪列并建立索引...条件列 ORDER BY、GROUP BY、DISTINCT的字段 多表JOIN的字段 区分度最大的字段放在前 核心SQL优先考虑覆盖索引 避免冗余和重复索引 索引不是越多越好 综合评估数据密度和分布

    1.7K170

    mysql使用规范

    目的 规范业务系统对MySQL数据库在设计、开发、运维等阶段所必须遵循的原则,旨在控制对数据库的滥用,收敛不合理的使用形式,保障数据库安全、稳定、高效的运行以及业务运营的稳定性。...适用范围 所有使用MySQL的业务系统。 数据库设计规范 【强制】所有的表必须指定主键(Primary Key),主键是尽可能小的INT类型,并且是AUTO_INCREMENT自增长形式。...(这样不但节省存储空间,更重要的是可以提升检索速度) 【强制】库名、表名以及字段名的命名不使用MySQL保留的关键字。...【推荐】数据表的命名结构最好使用: “业务名称_表的作用”。 【推荐】库名与应用名称尽量保持一致。 【推荐】单表行数超过500w行,或单表容量超过2G,才推荐使用分表分库。...数据库应用开发规范 【强制】数据库访问信息统一配置,必须可以满足一键切换访问实例。

    88520

    MySQL编程规范

    库名、表名、字段名禁⽌止使⽤用MySQL保留字 临时库、表名必须以tmp为前缀,并以日期为后缀,日期格式为YYYY[MM][DD][HH][mm][ss] 比如tmp_aaa_2016、tmp_aaa_...每行记录物理长度不超过8KB 索引规范 索引的数量要控制: 单张表中索引数量不超过5个 单个索引中的字段数不超过5个 对字符串使⽤用前缀索引,前缀索引长度不超过8个字符 建议优先考虑前缀索引,超过20个长度的字符串列...非唯一索引必须按照‘idx_字段名称_字段名称[_字段名]‘进行命名 比如user_id、user_name、user_email建立联合索引。...idx_userId_userName_userEmail 唯一索引必须按照‘uni_字段名称_字段名称[_字段名]‘进行命名 比如user_id、user_name、user_email建立联合索引...避免在数据库中进⾏数学运算(MySQL不擅长数学运算和逻辑判断) 不要用select *,查询哪几个字段就select 这几个字段 SQL中使用到‘or’的改写为用‘in’,‘or’的效率没有‘in’的效率高

    1.5K10

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券