随笔分类 - mysql
所有sql的运行环境为mysql5.7版本,演示数据库:http://downloads.mysql.com/docs/sakila-db.zip
摘要:MySQL的char和varchar存储和查询中包含空格的实验 MySQL版本 一、测试char包含空格的存储和查询 测试发现,存储的数据,char数据类型的右侧空格存储的时候被删除了,但是左侧空格还保留。 测试发现,查询的时候,char数据类型只是会判断查询条件中左侧的空格,右侧的空格也会忽略,因
阅读全文
摘要:本文将以“用户中心”为例,介绍“单KEY”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一、用户中心 用户中心是一个非常常见的业
阅读全文
摘要:军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间
阅读全文
摘要:一、缘起 当数据库的数据量非常大时,水平切分和垂直拆分是两种常见的降低数据库大小,提升性能的方法。假设有用户表: user( uid bigint, name varchar(16), pass varchar(16), age int, sex tinyint, flag tinyint, sig
阅读全文
摘要:一、为什么难 秒杀系统难做的原因:库存只有一份,所有人会在集中的时间读和写这些数据。 例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。 又例如12306抢票,亦与秒杀类似,瞬时流量更甚。 二、常见架构 流量到了亿级别,常见站点架构如上: 1)浏览器端,最上层,会执行到
阅读全文
摘要:本文主要讨论这么几个问题: (1)“缓存与数据库”需求缘起 (2)“淘汰缓存”还是“更新缓存” (3)缓存和数据库的操作时序 (4)缓存和数据库架构简析 一、需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。 例如对于用户的余额信息表acco
阅读全文
摘要:需求缘起 产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计: user(uid, name, passwd, nick) 第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成: user(uid, name, passwd, nick, age, sex) 假设数据量和并发量比较大,
阅读全文
摘要:一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 select * from order where status!=0 and stauts!=1 not in/not exists都不是好
阅读全文
摘要:TIMESTAMPDIFF 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)。 说明: 返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出
阅读全文
摘要:事务应该具有4个属性(ACID): 原子性(A):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(C):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 隔离性(I):多个事务并发执行时,一个事务的执
阅读全文
摘要:MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC,MVCC最大的好处: 读不加锁。(在MySQL/InnoDB中,所谓的读不加锁,并不适用于所有的情况,而是隔离级别相关的。Serializable隔离级别,读不加锁就不再成立,所有的读操作,都是当前读。) 读写不冲突。
阅读全文
摘要:MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。 MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking)。 BDB 存储引擎采用的是页面锁(page-level locking),但也支持表级锁。 InnoDB存储引擎既支持行级锁(ro
阅读全文
摘要:转自:架构师之路--58沈剑--一分钟了解索引技巧 花1分钟时间,了解聚集索引,非聚集索引,联合索引,索引覆盖。 举例,业务场景,用户表,表结构为: 聚集索引(clustered index):聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引,一般用primary key来约束。 举例:
阅读全文
摘要:一般分页查询时,通过创建覆盖索引能够比较好的提高性能。一个经常使用的场景:"limit 1000,20",此时MySQL排序出前1020记录后仅仅返回第1001到1020条记录。前1000条记录会被抛弃,查询和排序的代价非常高。 第一种优化思路 在索引上完成排序分页的操作,最后根据主键关联回原表查询
阅读全文
摘要:show status like 'Handler_read%'; Handler_read_key 代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高。 Handler_read_rnd_text 代表着在数据文件中读取下一行的请求数,如果进行大量的表扫描,Handl
阅读全文
摘要:procedure analyse() 优化表的数据类型 使用procedure analyse()对当前应用的表进行分析 select * from table_name procedure analyse(); select * from table_name procedure analyse
阅读全文
摘要:use index 在查询语句中表名的后面,添加use index来提供希望mysql去参考的索引列表,就可以让mysql不再考虑其他可用的索引 explain select * from rental use index(idx_rental_date)\G; ignore index 如果用户只
阅读全文
摘要:默认情况下,mysql对所有的gruop by col1,col2...的字段进行排序。如果查询包含group by但用户想要避免排序结果的消耗,则可以指定order by null禁止排序。 explain select payment_date,sum(amount) from payment
阅读全文
摘要:mysql 演示数据库:http://downloads.mysql.com/docs/sakila-db.zip 对于 or 语句,如果要利用索引,则 or 之间的每个条件都必须有索引 rental 表索引情况 or查询的前后都有索引列 (使用到了索引) explain select * from
阅读全文
摘要:mysql 演示数据库:http://downloads.mysql.com/docs/sakila-db.zip mysql 中排序方式 有序索引顺序扫描直接返回有序数据 explain select customer_id from customer order by store_id\G; 这
阅读全文

浙公网安备 33010602011771号