mysql索引和sql规范

MySQL在实际应用中的规范(表定义、SQL、索引等) 统一规范 存储引擎: 请统一使用innodb存储引擎,特殊的数据库引擎必须通过DBA的评审。 字符集: 统一使用utf8字符集。这个要从应用程序、服务器、数据库的表、字段等全部统一起来。注意:MySQL中的utf8mb4字符集,才是真正的utf8,请用这个。 作用范围:不要在MySQL存储大对象,比如图片、音乐等;不要用MySQL做Gis运算、全文检索;不使用存储过程、触发器、函数、外键,避免破坏数据库的性能和扩展性。 使用上限: 每个MySQL实例,数据库不要超过50个; 单数据库容量,... 阅读详情

索引规范


1、索引的数量要控制:

(1) 单张表中索引数量不超过5个

(2) 单个索引中的字段数不超过5个

(3) 对字符串使⽤用前缀索引,前缀索引长度不超过8个字符

(4) 建议优先考虑前缀索引,必要时可添加伪列并建立索引

2、主键准则

(1) 表必须有主键

(2) 不使用更新频繁的列作为主键

(3) 尽量不选择字符串列作为主键

(4) 不使用UUID MD5 HASH这些作为主键(数值太离散了)

(5) 默认使⽤非空的唯一键作为主键

(6) 建议选择自增或发号器

3、重要的SQL必须被索引,比如:

(1) UPDATE、DELETE语句的WHERE条件列

(2) ORDER BY、GROUP BY、DISTINCT的字段

4、多表JOIN的字段注意以下:

(1) 区分度最大的字段放在前面

(2) 核⼼SQL优先考虑覆盖索引

(3) 避免冗余和重复索引

(4) 索引要综合评估数据密度和分布以及考虑查询和更新比例

5、索引禁忌

(1) 不在低基数列上建立索引,例如“性别”

(2) 不在索引列进行数学运算和函数运算

6、尽量不使用外键

(1) 外键用来保护参照完整性,可在业务端实现

(2) 对父表和子表的操作会相互影响,降低可用性

7、索引命名:非唯一索引必须以 idx_字段1_字段2命名,唯一所以必须以uniq_字段1_字段2命名,索引名称必须全部小写

8、新建的唯一索引必须不能和主键重复

9、索引字段的默认值不能为NULL,要改为其他的default或者空。NULL非常影响索引的查询效率

10、反复查看与表相关的SQL,符合最左前缀的特点建立索引。多条字段重复的语句,要修改语句条件字段的顺序,为其建立一条联合索引,减少索引数量

11、能使用唯一索引就要使用唯一索引,提高查询效率

12、研发要经常使用explain,如果发现索引选择性差,必须让他们学会使用hint


SQL规范


(1) sql语句尽可能简单

大的sql想办法拆成小的sql语句(充分利用QUERY CACHE和充分利用多核CPU)

(2) 事务要简单,整个事务的时间长度不要太长

(3) 避免使用触发器、函数、存储过程

(4) 降低业务耦合度,为sacle out、sharding留有余地

(5) 避免在数据库中进⾏数学运算(MySQL不擅长数学运算和逻辑判断)

(4) 不要用select *,查询哪几个字段就select 这几个字段

(5) sql中使用到OR的改写为用 IN() (or的效率没有in的效率高)

(6) in里面数字的个数建议控制在1000以内

(7) limit分页注意效率。Limit越大,效率越低。可以改写limit,比如例子改写:

select id from tlimit 10000, 10; => select id from t where id > 10000 limit10;

(9) 使用union all替代union

(10) 避免使⽤大表的JOIN

(11) 使用group by 分组、自动排序

(12) 对数据的更新要打散后批量更新,不要一次更新太多数据

(13) 减少与数据库的交互次数

(13) 注意使用性能分析工具

Sql explain / showprofile / mysqlsla

(14) SQL语句要求所有研发,SQL关键字全部是大写,每个词只允许有一个空格

(15) SQL语句不可以出现隐式转换,比如 select id from 表 where id='1'

(16) IN条件里面的数据数量要少,我记得应该是500个以内,要学会使用exist代替in,exist在一些场景查询会比in快

(17) 能不用NOT IN就不用NOTIN,坑太多了。。会把空和NULL给查出来

(18) 在SQL语句中,禁止使用前缀是%的like

(19) 不使用负向查询,如not in/like

(19) 关于分页查询:程序里建议合理使用分页来提高效率limit,offset较大要配合子查询使用

(20) 禁止在数据库中跑大查询

(21) 使⽤预编译语句,只传参数,比传递SQL语句更高效;一次解析,多次使用;降低SQL注入概率

(22) 禁止使⽤order by rand()

(23) 禁⽌单条SQL语句同时更新多个表

GAMES101学习-第8课进行shader的初步了解 详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。 阅读详情

相关推荐

QuickFix Java 实战(一)协议解析、环境搭建与首个应用

本文是QuickFix Java实战系列的第一篇,详细介绍了FIX协议的核心原理与QuickFix/J引擎的实战应用。内容涵盖FIX协议的标签化通信机制、QuickFix/J库的两种下载方法、协议定义文件解析,并通过一个完整的模拟订单发送示例,指导读者快速搭建首个FIX应用环境,实现消息生成与会话通信。

dog123的博客 495

表连接不宜太多,索引不宜太多,一般5个以内

insert或update时有可能会重建索引,如果数据量巨大,重建将进行记录的重新排序,所以建索引需要慎重考虑,视具体情况来定;一个表的索引数最好不要超过5个,若太多需要考虑一些索引是否有存在的必要;索引并不是越多越好,虽其提高了查询的效率,但却会降低插入和更新的效率;如果一定需要连接很多表才能得到数据,那么意味着这是个糟糕的设计了。索引可以理解为一个就是一张表,其可以存储数据,其数据就要占空间;关联的表个数越多,编译的时间和开销也就越大。索引表的数据是排序的,排序也是要花时间的;

weixin_63173847的博客 1153

2022年电赛F题23年电赛D题-信号调制度测量装置说明中提到带通采样定律。

另外,当对于一个频率很高的射频信号采样时,如果采样频率设的太低,对提高采样量化的信噪比是不利的。低通采样定理在《信号与系统》教材中进行了详细的讨论,但未对带通信号的采样定理进行描述,国内樊昌信和曹丽娜老师编写的《通信原理》第10章第2小节有所描述,但没有详细的公式推导,容易给初学者产生超过该最低采样频率即不会产生频谱混叠的假象。故采样频率没选好,就会使周期性频谱搬移过程中造成频谱混叠,既然频谱和原信号的频谱对不上了,故就无法无失真恢复原信号了,总之,频域波形不出现重叠是无失真传输的重要保障。

qq_64919823的博客 2183

索引设计规范

索引是帮助数据库高效获取数据的数据结构。索引是加速查询的常用技术手段。在设计索引时,要遵循索引设计规范,避免不必要的踩坑。

云原生Java Web领域技术博客 1095

激光可燃气体传感器DIY指南:从TDLAS原理到STM32实战(附代码)

本文详细介绍了如何DIY激光可燃气体传感器,从TDLAS原理到STM32实战,包括硬件选型、光路搭建、电子系统设计和嵌入式软件开发。通过TDLAS技术实现高灵敏度甲烷检测,适合工业安全和环境监测应用。附有完整代码和实用调试技巧,帮助开发者快速掌握光学气体检测技术。

fanta的博客 440

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

Ubuntu安装Intel WiFi系列适配器(网卡驱动)

lu_linux的博客 2601

MySQL 大表优化方案(长文)

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 1、尽量使用TI...

weixin_49071459的博客 586

【ubuntu】【VirtualBox】VirtualBox无法加载USB移动设备的解决方法(支持U盘启动盘)

提示:测试可用。

联系方式:927632640 2440

数据库字段及索引设计规范

字段设计规范 1. 优先选择符合存储需要的最小的数据类型1 原因:列的字段越大,建立索引时所需要的空间也就越大,这样一页中所能存储的索引节点的数量也就越少也越少,在遍历时所需要的 IO 次数也就越多,索引的性能也就越差。 方法a. 将字符串转换成数字类型存储,如:将 IP 地址转换成整形数据 MySQL 提供了两个方法来处理 ip 地址 inet_ato...

happyJared 1959

帝企鹅优化器(EPO)详解:从基础原理到代码实战

帝企鹅优化器(EPO)是受帝企鹅群体在极寒环境中抱团取暖行为启发,于2018年提出的一种群体智能优化算法。其核心机制是模拟帝企鹅种群通过动态调整位置来维持体温的过程,主要包括确定集群边界、计算温度分布、衡量个体间距离以及更新位置四个步骤,从而在求解复杂优化问题时有效平衡全局探索与局部开发。该算法具有参数少、结构清晰、易于实现等优点,在工程优化、图像处理、机器学习特征选择以及冷链物流车辆路径规划等领域展现出良好的应用潜力。

qq_42212808的博客 139

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5060

Mysql索引

mysql 索引分类 从物理存储角度分为: 聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据 非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置 从逻辑存储角度分为: 普通索引:仅加速查询,无限制 唯一索引:加速查询 ,列值唯一(可以有null),如果是组合索引,则列值的组合必须唯一 主键索引:加速查询 ,列值唯一(不可以有null),表中只允许有一个主键索引, 是一种特殊的唯一索引 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并..

qq_57558631的博客 1932

3.嵌入式控制器EC学习,源码框架(60/64端口)(一)

服务函数剖析 上一篇讲到while循环会一直查询十六个标志位是否满足要求,一旦其中某个标志位为1时,程序将会执行相应的服务函数,而执行服务函数是通过函数指针(service_table[ _R1 ])();来实现的。接下来我们分别来看看这十六个服务函数分别包含了哪些内容。 16个函数的函数名如下: const FUNCT_PTR_V_V code service_table[16] = { // Hi-Level Service Service_PCI, // Host 6

qq_30135687的博客 4160

精心整理Mysql的索引、建表、SQL语句和ORM的规范

【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint( 1表示是,0表示否),此规则同样适用于odps建表。说明:任何字段如果为非负数,必须是unsigned。【强制】数据库名,表名、字段名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

2301_79584629的博客 843

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

in 用不用索引_Mysql索引、书写规范及sql执行性能优化

面试中经常会碰到让面试者根据题目写出相应的sql,然后针对sql语句进行优化,这就考察到了索引和sql执行策略方面的知识。通过写sql可以看出一个程序猿的逻辑思维能力和sql语法功底。今天就为大家梳理一下mysql索引、书写规范和sql性能优化相关的知识。一、Mysql索引1、索引的作用简单来说,索引是为了加快查询速度来设置的。索引可以快速找出某一列中含有特定值的行,如果不使用索引,my...

weixin_39751871的博客 129

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySQL 开发规范清单:建表、索引、SQL、ORM 四块一次讲透

MySQL 开发规范怎么落地?本文把阿里 Java 手册里建表、索引、SQL、ORM 四块的硬性规约拆成一份清单,每条配反例和血泪经验,收藏这一篇就够用了。

大家好,我是一名大三学生,主攻 Java 后端开发。熟悉 Spring 全家桶、MySQL、Redis 以及微服务常用中间件。热爱数据结构与算法,经常在 GitHub 上分享开源项目,也在 优快云 记录自己的学习过程。欢迎关注我,一起交流 199

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySql设计规范及SQL索引优化【呕心之作】

数据库及表结构基本设计规范 1. 所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)。Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好。 2. 优先选择符合存储需要的最小的数据类型 列的字段越大,...

HERO笔记 158

数据库表设计(二):索引规范和SQL语句规范

说明对多表进行查询记录、更新记录、删除记录时,如果对操作列没有限定表的别名(或表名),并且操作列在多个表中存在,就会抛异常。正例反例如果没加别名限制,在另一个表中增加了一个同名字段线上查询可能会导致1052异常反例某工程师为避免写一个xxx,直接使用HashTable接收数据库返回结果结果由于数据库版本不一样,出现日常把bigint转成Long值,而线上把bigint解析成BigInteger的现象,导致线上出现问题。...

晓风残月淡的博客 4138

mysql日志表索引设计_MySql设计规范及SQL索引优化【呕心之作】

数据库及表结构基本设计规范1. 所有表必须使用Innodb存储引擎没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)。Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好。2. 优先选择符合存储需要的最小的数据类型列的字段越大,建立索引时所需要的...

weixin_39775577的博客 717

数据库规范

数据库规范 一、建表规范 强制要求: 1.存储引擎必须使用InnoDB explain: InnoDB支持事物、行级锁、并发性能更好,CPU及内存缓存页优化使得资源利用率更高。 2.每张表必须设置一个主键ID,并且这个主键id使用自增主键(在满足需要的情况下尽量短),除非是在分库分表的环境下。 explain:由于InnoDB组织数据的方式决定了需要一个主键,而且若是这个主键是单调递增的可以有效的提高插入性能,避免过多的页分裂、减少表碎片提高空间的使用率。而在分库分表的环境下,则需要统一来分配各

WelcomeToMyWorld的博客 710

《Mysql设计规范》- 数据库命名规范 / 数据库基本设计规范 / 索引设计规范 / 字段设计规范 / SQL开发规范 / 数据库操作行为规范

文章目录 一、数据库命名规范 二、数据库基本设计规范 三、索引设计规范 四、字段设计规范 五、SQL开发规范 六、数据库操作行为规范 版权声明:本文为博主王佳斌原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/weixin_44198965/article/details/108987584 一、数据库命名规范 所有的数据库对象名称必须使用小写字母并用下划线表示,因为默认情况下,my...

gening721的博客 215

接上篇日志规范,一起再来赏析阿里巴巴MySQL规范

更新风暴问题是指,由于某些约束,例如外键约束或者触发器约束,当一条记录被更新时,相关约束的记录也会被更新,引发一系列连锁反应,导致短时间大量更新操作引发数据库性能下降甚至死锁的问题。因此,分布式场景一般禁止使用外键约束,或者触发器约束。1. 唯一索引虽然影响插入速度,但针对于互联网大数据量高并发量的数据存储场景来说,插入的影响可以忽略不计,查询效率的提升是主要矛盾;1. 如果一列全是NULL,sum(column)返回的是NULL,因此在使用sum时,应用程序务必考虑NPE问题;

m0_55399448的博客 1233

MySQL 开发规范和使用约束

mysql学习教程

小凯的博客 770

MySQL使用规范

MySQL使用,设计规范

非洲绿头鸭的博客 1091

MySQL规范

MySQL规范整理 命名规范 基础规范 库表设计 字段设计 索引规范 SQL设计 行为规范 FAQMySQL规范整理1. 命名规范① 库名、表名、字段名必须使用小写字母,并采用下划线分割 如库名/表名/字段名: sys_user ② 库名、表名、字段名禁止超过32个字符。须见名之意 ③ 库名、表名、字段名禁止使用MySQL保留字 ④ 临时库、表名必须以temp为前缀,并以日期为后缀 如:te

灯塔的优快云博客 750

mysql库、表、字段、索引设计通用规范

以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。 1、数据库设计 1、库名 【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量体现关联关系,如user表和user_login表。 【强制】库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀。 【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8mb4。创建数据库SQL举例:create da

JineD的博客 9040
上一篇: scrapy中使用代理
下一篇: 备份mysq binlog shell
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值