memory,因此在临时表排序时可能会导致占用空间太多varchar在面对频繁的修改时,还可能造成重建记录、页分裂等问题固定长度、频繁的修改可以选择char不定长、末尾要存储空格时可以选择varchar...千万数据下性能提升10%~30%文本、文件类型的选择文本相关可以选择TEXT相关类型,使用时最好与常用列进行垂直拆分,避免内容太多影响其他列的查询文件相关可以存储到文件服务器后,在数据库中使用字符类型(...,如果要获取列的完整信息就要进行回表列中重复值太多,不建议建立索引当列中重复值太多时,它在查询时的区分度不够其次在使用该索引时(重复值太多cardinality太低),如果要回表MySQL会认为回表开销太大...,数据量大的情况下是一笔不小的开销)无法使用覆盖索引,使用二级索引时会回表(如果需要的列正好都在二级索引上,那么就可以使用覆盖索引不用回表)联表查询使用join buffer时会占用join buffer...=会被认为重复值太多当重复值太多(回表开销大)MySQL会不偏向使用索引,导致索引失效注意联表性能注意联表查询的时间复杂度是呈指数形式增长的,联表越多性能越差,但是有的B端又必须进行联表查询提供以下几点方案优化联表
,分离冷热数据 解读:具体参加《如何实施数据库垂直拆分》 四、列设计规范 根据业务区分使用tinyint/int/bigint,分别会占用1/4/8字节 根据业务区分使用char/varchar 解读:...解读:ENUM增加新值要进行DDL操作 五、索引规范 唯一索引使用uniq_[字段名]来命名 非唯一索引使用idx_[字段名]来命名 单张表索引数量建议控制在5个以内 解读: (1)互联网高并发业务,太多索引会影响写性能...(2)生成执行计划时,如果索引太多,会降低性能,并可能导致MySQL选择不到最优索引 (3)异常复杂的查询需求,可以选择ES等更为适合的方式存储 组合索引字段数不建议超过5个 解读:如果5个字段还不能极大缩小...理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c) 六、SQL规范 禁止使用select *,只获取必要字段 解读: (1)select...*会增加cpu/io/内存/带宽的消耗 (2)指定字段能有效利用索引覆盖 (3)指定字段查询,在表结构变更时,能保证对应用程序无影响 insert必须指定字段,禁止使用insert into T values
对于频繁的查询优先考虑使用覆盖索引。...MySQL外键会建立索引 不建议使用外键约束 表与表之间的关联键建立索引是必须的 外键会影响父表和子表的写操作而降低性能(检查约束导致的) 字段设计规范 优先选择符合存储需要的最小的数据类型 将字符串转化为数字类型存储...,如果子查询数据量大则严重影响效率 避免使用 JOIN关联太多的表 每 JOIN一个表会多占用一部分内存(joinbuffersize) 会产生临时表,影响查询效率 MySQL最多允许关联61个表,建议不超过...,消耗大量CPU和IO和内存 建议:在程序中生成随机值,再获取数据 禁止在 WHERE从句中队列进行函数转换和计算 导致无法使用索引 明显不会有重复值的用 UNION ALL而不是 UNION UNION...会把所有数据放到临时表中后再进行去重操作 UNION ALL则不会做去重操作 拆分复杂的大SQL为多个小SQL 一个SQL只用一个CPU计算 拆分后可以并行执行 操作行为规范 超过100万行的批量写操作
,分离冷热数据 解读:具体参考《如何实施数据库垂直拆分》 四、列设计规范 根据业务区分使用tinyint/int/bigint,分别会占用1/4/8字节 根据业务区分使用char/varchar...增加新值要进行DDL操作 五、索引规范 唯一索引使用 uniq_[字段名] 来命名 非唯一索引使用 idx_[字段名] 来命名 单张表索引数量建议控制在5个以内 解读: (1)互联网高并发业务,太多索引会影响写性能...(2)生成执行计划时,如果索引太多,会降低性能,并可能导致MySQL选择不到最优索引 (3)异常复杂的查询需求,可以选择ES等更为适合的方式存储 组合索引字段数不建议超过5个 解读:如果5...理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c) 六、SQL规范 禁止使用 select *,只获取必要字段 解读: (...1)select *会增加cpu/io/内存/带宽的消耗 (2)指定字段能有效利用索引覆盖 (3)指定字段查询,在表结构变更时,能保证对应用程序无影响 insert必须指定字段,禁止使用insert
七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。...可以把随机 IO 变成顺序 IO 加快查询效率 由于覆盖索引是按键值的顺序存储的,对于 IO 密集型的范围查找来说,对比随机从磁盘读取每一行的数据 IO 要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的...在 MySQL 中,对于同一个 SQL 多关联(join)一个表,就会多分配一个关联缓存,如果在一个 SQL 中关联的表越多,所占用的内存也就越大。...在明显不会有重复值时使用 UNION ALL 而不是 UNION UNION 会把两个结果集的所有数据放到临时表中后再进行去重操作。 UNION ALL 不会再对结果集进行去重操作。 15....拆分复杂的大 SQL 为多个小 SQL 大 SQL:逻辑上比较复杂,需要占用大量 CPU 进行计算的SQL 。 MySQL:一个 SQL 只能使用一个 CPU 进行计算。
光看介绍,大家会感觉FFmpeg平淡无奇,并没有太多存在感,也没有太多知名度。但是实际上通过调研学习会发现,它比想象中的更加强大。...现在火热的短视频APP,技术处理会用到FFmpeg 这些APP一般使用 FFmpeg或者基于FFmpeg优化来实现裁剪、滤镜、水印、拼接、过渡、混音等特效。 由此,FFmpeg的强大可见一斑。...资源占用情况 在测试FFmpeg解码器过程,需要注意对资源占用的影响,例如对于CPU,内存和耗电量的消耗情况。其中CPU和内存的资源占用的性能评测尤为重要。...FFMPEG缓存区大小 在测试FFmpeg视频解码过程,需要注意设置的缓存区大小对于视频播放的影响。如果当缓存区大小设置过小,当图像快速更新或具有高分辨率时,可能会导致视频播放出现马赛克化。...Step 1 – Setup FFmpeg PPA 目前在ubuntu中FFmpeg的最新版本是FFmpeg 4。
内存环/环形缓冲区 (Circular-Buffer) 直播流是一个不断进行传输、未知总长度的数据源,拉取到的数据在被 Decoder Worker 读取之前会进行暂存,被读取之后需要及时清除或覆盖,否则会导致客户端被占用过多的内存和磁盘资源...,不断向后移动两个指针指向的位置,这样就可以让流数据在这个内存环中不断写入、被解码、被覆盖,使得总体内存使用量可控,在直播过程中不会耗费客户端过多的资源。...buffer 是指向一块自定义的内存缓冲区的指针; buffer_size 是这块缓冲区的长度; write_flag 是标识向内存中写数据(1,编码时使用)还是其他,比如从内存中读数据(0,解码时使用...由于我们此次主要针对 H.265 的解码进行实践,所以可以在编译时通过参数来定制 FFmpeg 只支持必要的解封装和解码器。不同于常规编译 FFmpeg 时使用的....占用率在 40% ~ 50% 之间。
禁止使用外键,如果要保证完整性,应由应用程式实现 解读:外键使得表之间相互耦合,影响update/delete等SQL性能,有可能造成死锁,高并发情况下容易成为数据库瓶颈 建议将大字段,访问频度低的字段拆分到单独的表中存储...增加新值要进行DDL操作 五、索引规范 唯一索引使用uniq_[字段名]来命名 非唯一索引使用idx_[字段名]来命名 单张表索引数量建议控制在5个以内 解读: (1)互联网高并发业务,太多索引会影响写性能...(2)生成执行计划时,如果索引太多,会降低性能,并可能导致MySQL选择不到最优索引 (3)异常复杂的查询需求,可以选择ES等更为适合的方式存储 组合索引字段数不建议超过5个 解读:如果5个字段还不能极大缩小...理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c) 六、SQL规范 禁止使用select *,只获取必要字段 解读: (1...)select *会增加cpu/io/内存/带宽的消耗 (2)指定字段能有效利用索引覆盖 (3)指定字段查询,在表结构变更时,能保证对应用程序无影响 insert必须指定字段,禁止使用insert into
过大的长度会消耗更多的内存 2、避免使用TEXT、BLOB数据类型,最常见的TEXT类型可以存储64k的数据 建议把BLOB或是TEXT列分离到单独的扩展表中 Mysql内存临时表不支持TEXT、BLOB...这样的大数据类型,如果查询中包含这样的数据,在排序等操作时,就不能使用内存临时表,必须使用磁盘临时表进行。...重复索引示例:primary key(id)、index(id)、unique index(id) 冗余索引示例:index(a,b,c)、index(a,b)、index(a) 优先考虑覆盖索引...在Mysql中,对于同一个SQL多关联(join)一个表,就会多分配一个关联缓存,如果在一个SQL中关联的表越多,所占用的内存也就越大。...:逻辑上比较复杂,需要占用大量CPU进行计算的SQL 2、MySQL:一个SQL只能使用一个CPU进行计算 3、SQL拆分后可以通过并行执行来提高处理效率 数据库操作行为规范 大批量操作可能会造成严重的主从延迟
(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO) 更有效的利用缓存,避免读入无用的冷数据 经常一起使用的列放到一个表中(避免更多的关联操作) 7、禁止在表中建立预留字段 预留字段的命名很难做到见名识义...预留字段无法确认存储的数据类型,所以无法选择合适的类型 对预留字段类型的修改,会对表进行锁定 8、禁止在数据库中存储图片,文件等大的二进制数据 通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。...14、在明显不会有重复值时使用UNION ALL而不是UNION · UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 · UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大
(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO) 更有效的利用缓存,避免读入无用的冷数据 经常一起使用的列放到一个表中(避免更多的关联操作) 7、禁止在表中建立预留字段 预留字段的命名很难做到见名识义...预留字段无法确认存储的数据类型,所以无法选择合适的类型 对预留字段类型的修改,会对表进行锁定 8、禁止在数据库中存储图片,文件等大的二进制数据 通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。...15、拆分复杂的大SQL为多个小SQL · 大SQL:逻辑上比较复杂,需要占用大量CPU进行计算的SQL · MySQL:一个SQL只能使用一个CPU进行计算 · SQL拆分后可以通过并行执行来提高处理效率
6、尽量做到冷热数据分离,减小表的宽度 MySQL限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节 减少磁盘IO,保证热数据的内存缓存命中率(表越宽,把表装载进内存缓冲池时所占用的内存也就越大...过大的长度会消耗更多的内存!...【索引也会占用存储空间,消耗资源】 索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。若太多则应考虑一些不常使用到的列上建的索引是否有必要。...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。
在尝试了多个版本编译之后,发现基于 3.3.9 版本编译时禁用掉 swresample 之类的库后能够成功编译,而一些较新的版本禁用之后依然会有编译内存不足的问题。...包括体积、内存、CPU消耗等方面,首先看下初始的性能表现,由于CPU占用和耗时在不同的机型上有不同的表现,所以我们先主要关注体积和内存占用方面,如图6。...wasm 的原始文件大小为11.6M,gzip 后大小为4M,初始化内存为220M,在线上使用的话会需要加载很长的时间,并且占用不小的内存空间。 !.../configure --help 后可以看到 ffmpeg 的编译选项十分丰富,可以根据我们的业务场景,选择常见的编码和封装格式,并基于此做详细的编译优化配置,具体优化后的编译配置如下。...的编译优化之后,文件大小和内存占用如图7。
锁定太多数据,造成大量阻塞和锁超时; 回滚时所需时间比较长,且数据仍然会处于锁定; 如果执行时间长,将造成主从延迟,因为只有当主服务器全部执行完写入日志时,从服务器才会开始进行同步,造成延迟。...如果对多个表进行刷新时,实际上是顺序进行的,会产生IO瓶颈。 独立表空间可以同时向多个文件刷新数据。 强烈建立对Innodb使用独立表空间,优化什么的会更方便可控。...或者Alter table同样可以的转移,但是无法回收系统表空间中占用的空间。...2)索引不是越多越好 索引会增加写操作的成本; 太多的索引会增加查询优化器的选择时间。...存储引擎不支持覆盖索引; 查询中使用了太多的列(如SELECT * ); 使用了双%号的like查询(底层API所限制); 可参考“mysql高效索引之覆盖索引” https://www.cnblogs.com
点击上方“Python数据科学”,选择“星标”公众号? 重磅干货,第一时间送达 ?...(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO) 更有效的利用缓存,避免读入无用的冷数据 经常一起使用的列放到一个表中(避免更多的关联操作) 7、禁止在表中建立预留字段 预留字段的命名很难做到见名识义...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。...14、在明显不会有重复值时使用UNION ALL而不是UNION · UNION会把两个结果集的所有数据放到临时表中后再进行去重操作 · UNION ALL不会再对结果集进行去重操作 15、拆分复杂的大
(表越宽,把表装载进内存缓冲池时所占用的内存也就越大,也会消耗更多的IO) 更有效的利用缓存,避免读入无用的冷数据 经常一起使用的列放到一个表中(避免更多的关联操作) 7、禁止在表中建立预留字段 预留字段的命名很难做到见名识义...预留字段无法确认存储的数据类型,所以无法选择合适的类型 对预留字段类型的修改,会对表进行锁定 8、禁止在数据库中存储图片,文件等大的二进制数据 通常文件很大,会短时间内造成数据量快速增长,数据库进行数据库读取时...因为mysql优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加mysql优化器生成执行计划的时间,同样会降低查询性能...七、避免建立冗余索引和重复索引 因为这样会增加查询优化器生成执行计划的时间。...:逻辑上比较复杂,需要占用大量CPU进行计算的SQL 2、MySQL:一个SQL只能使用一个CPU进行计算 3、SQL拆分后可以通过并行执行来提高处理效率 十一、数据库操作行为规范 1、超100万行的批量写
领取专属 10元无门槛券
手把手带您无忧上云