不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2015-06-20 13:52  分类:MySQL/NoSQL 

update table1 t1 ,table2 t2 set t1.field1 = t2.field2 where t1.id = t2.id

作者:php-note.com  发布于:2015-06-06 20:10  分类:MySQL/NoSQL 
作者:php-note.com  发布于:2015-01-05 14:08  分类:MySQL/NoSQL 

场景

Mutex主要用于有大量并发访问并存在cache过期的场合,如

  • 首页top 10, 由数据库加载到memcache缓存n分钟;
  • 微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库;
  • 需要执行多个IO操作生成的数据存在cache中, 比如查询db多次;

问题

在大并发的场合,当cache失效时,大量并发同时取不到cache,会同一瞬间去访问db并回设cache,可能会给系统带来潜在的超负荷风险。我们曾经在线上系统出现过类似故障。

作者:php-note.com  发布于:2014-11-18 10:22  分类:MySQL/NoSQL 

在修改/增加表字段的时候,发现很慢,

show processlist; 时, Waiting for table metadata lock 能一直锁很久。

alter table的语句是很危险的,在操作之前最好确认对要操作的表没有任何进行中的操作、没有未提交事务、也没有显式事务中的报错语句。如果有alter table的维护任务,在无人监管的时候运行,最好通过lock_wait_timeout设置好超时时间,避免长时间的metedata锁等待。

作者:php-note.com  发布于:2014-11-10 15:10  分类:MySQL/NoSQL 

作者:php-note.com  发布于:2014-11-10 11:20  分类:MySQL/NoSQL 

MySQL SELECT ... FOR UPDATE 的 Row Lock 与 Table Lock

上面介绍过SELECT ... FOR UPDATE 的用法,不过锁定(Lock)的数据是判别就得要注意一下了。由于InnoDB 预设是Row-Level Lock,所以只有「明确」地指定主键,MySQL 才会执行 Row lock (只锁住被选取的数据) ,否则MySQL 将会执行 Table Lock (将整个数据表单给锁住)。

作者:php-note.com  发布于:2014-11-08 23:35  分类:MySQL/NoSQL 

WHERE 条件

有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。

语法:

SELECT column,… FROM tb_name WHERE definition
作者:php-note.com  发布于:2014-10-28 13:57  分类:MySQL/NoSQL 
作者:php-note.com  发布于:2014-10-20 15:45  分类:MySQL/NoSQL 

MySQL中索引的限制:

1、MyISAM存储引擎引键的长度综合不能超过1000字节;

2、BLOBTEXT类型的列只能创建前缀索引;

3、MySQL目前不支持函数索引

4、使用!= 或者<>的时候MySQL不能使用索引;

5、过滤字段使用了函数运算的时候如  abs(key), sum(key)的时候MySQL无法使用索引;

6、使用LIKE操作的时候以%开始无法使用索引,所以尽量写出key LIKE 'abc%' 而不要写出 '%abc%' ,后一种方法是不会使用到索引的;

7、使用非等值查询的时候,MySQL无法使用Hash索引

作者:php-note.com  发布于:2014-10-20 15:40  分类:MySQL/NoSQL 

如何判定是否需要创建索引?

1、较频繁地作为查询条件的字段;
2、唯一性太差的字段不适合建立索引;
3、更新太频繁地字段不适合创建索引;
4、不会出现在where条件中的字段不该建立索引;