记录一次数据库慢sql
起因由于数据库系统的查询一直在使用es监控,某一天收到一条报警记录 在遇到这个告警的时候,还存在一些疑问,这么简单的sql居然会报慢查询。 经过经过查看数据库数据,发现由于topic_type只有1和0两个状态,就未给它设置索引 结果经过查看该表有数据40+W,在sql中topic_type=1的数据比formid的数据多的多,导致了查询时导致了慢sql 后记修改了sql的查询顺序,发现再也没有慢日志产生,由此得出结论: 数据库语句查询条件并非并行,而是有先后关系,所以一定要注意查询语句的先后关系,范围小的先放前面 该加索引就必须加索引,数据库性能达到瓶颈能导致整个系统崩溃 微服务环境下,不仅要分库分表,还需要将不同服务的数据库分别部署,增强容灾性,一旦某个库达到瓶颈,后果会形成链式反应
Elasticsearch的功能、使用场景以及特点
1、Elasticsearch的功能(1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检索 数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些 分布式,搜索,数据分析 (2)全文检索,结构化检索,数据分析 全文检索:我想搜索商品名称包含牙膏的商品,select * from products where product_name like “%牙膏%” 结构化检索:我想搜索商品分类为日化用品的商品都有哪些,select * from products where category_id=’日化用品’ 部分匹配、自动完成、搜索纠错、搜索推荐 数据分析:我们分析每一个商品分类下有多少个商品,select category_id,count(*) from products group by category_id (3)对海量数据进行近实时的处理 分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索 海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自...
MYSQL线上审核规范
命名规范 Ø库名、表名、字段名,使用小写字母 Ø库名、表名、字段名,不要超过30个字符 Ø库名、表名、字段名,尽量见名知意,使用下划线分割 Ø库名、表名、字段名,禁止使用MySQL保留字 Ø临时库、表名,必须以tmp为前缀,以日期为后缀,例如tmp_product_20151229 Ø备份表、表名,必须以日期为后缀,例如produce_bak_20151229 库表设计Ø表必须有主键,使用bigint unsigned类型auto_increment属性 Ø除主键外的其他字段都必须有注释,所有表都必须有说明 Ø最多更改和查询的字段放在基础表内,方便完整载入内存 Ø访问频率低的或大字段放到扩展表里,分离冷热数据 Ø多张关联表之间,适当的冗余字段,可以减少JOIN查询 Ø如果预计数据量较大,预先制定分表策略,如按日期拆分或按某键值取模分表 Ø尽量不用分区表,如需使用请与DBA沟通 字段设计Ø只有主键使用UNSIGNED属性,其他数值列不要使用,因为计算出现负数时会报错 Ø当字符串较短,或数据频繁更新时,可以使用CHAR(N),N表示字符数而非字节数 Ø当字符串长度可预见时,可以使用...
MySQL线上语句标准格式
CREATE DATABASE标准SQL12345678<!-- more -->SET NAMES UTF8;CREATE DATABASE example_db DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; #collate建议使用utf8-bin CREATE TABLE标准SQL12345678910111213141516171819202122232425262728293031323334353637SET NAMES UTF8;DROP TABLE IF EXISTS example_db.example;CREATE TABLE example_db.example( #常规字段为 int,bigint,varchar,text,tinyint`id` int(10) UNSIGNED NOT NULL COMMENT 'comment' AUTO_INCREMENT,`account_id` bigint(20) UNSIGNED NOT NULL DEFAULT 0 COMME...
MySQL特殊字段类型选择
金额字段类型选择 1.decimaldecimal(M,N) 0<M<65,0<N<30,且N<M,M和N的长度直接影响存储空间 默认情况,表示金额的情况,decimal(16,2),范围是99,999,999,999,999.99 to -99,999,999,999,999.99 占用空间为8个字节 存储时会四舍五入 2.bigint占用空间为8个字节 存储相同大写的数字是,decimal比bigint多1个字节 存入数据库时,decimal会做四舍五入 create table ta (a decimal(4,2),b int); insert into ta (a,b) values(99.006,9900); select * from ta; 12345678910+-------+------+| a | b |+-------+------+| 99.01 | 9900 |+-------+------+ 总结:1.decimal&bigint在做计算时,都不会丢失精度(float&double...
redis-开发规范
1.冷热数据分离,不要将所有数据全部都放到Redis中 虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵。建议根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数据可以使用MySQL/ElasticSearch/MongoDB等基于磁盘的存储方式,不仅节省内存成本,而且数据量小在操作时速度更快、效率更高! 2.不同的业务数据要分开存储不要将不相关的业务数据都放到一个Redis实例中,建议新业务申请新的单独实例。因为Redis为单线程处理,独立存储会减少不同业务相互操作的影响,提高请求响应速度;同时也避免单个实例内存数据量膨胀过大,在出现异常情况时可以更快恢复服务! 3.存储的Key一定要设置超时时间如果应用将Redis定位为缓存Cache使用,对于存放的Key一定要设置超时时间!因为若不设置,这些Key会一直占用内存不释放,造成极大的浪费,而且随着时间的推移会导致内存占用越来越大,直到达到服务器内存上限!另外Key的超时长短要根据业务综合评估,而不是越长越好! 4.对于必须要存储的大文本数据一定要压缩后存...