mysql项目实践知识汇总(本文长期更新)
1、如果记录存在,则执行update,否则,插入一条新纪录:
INSERT INTO table (a,b,c) VALUES (1,2,3)
-
ON DUPLICATE KEY UPDATE c=c+1;
这里假设a为主键或者唯一索引,当a已存在时,则执行update部分,否则执行insert部分。ps. 要执行此语句必须有字段是主键或者唯一索引。
2、读写分离。对许多网站,读操作都远大于写,据说ebay读写比例高达265:1,而且还在不断增长。很多这样的网站都使用一种读写分离的方法来优化数据库。

读写分离的好处:
- 针对write db和read db进行配置,比如:a. read db设为读优先,写进程比如等待所有读进程完成才能写入。b. read db做索引,write db不做索引。做索引是利用写开销来换取读开销。
- 服务器资源配置最优化。
- 批量写入,减少数据库连接。
- 配合mysql proxy连接池功能,解决连接数超限的问题。平均分摊连接数。
读写分离的实现:
- 为了向请求端屏蔽db实现的复杂度,避免增减db服务器时修改请求端代码,可以在请求端和db集群间添加一个中间件:mysql proxy 来进行db请求的调度,从而在请求端完全屏蔽db实现的复杂度。
- 使用mysql proxy作为连接池,利用lua脚本将请求自动分发给write/read db。
3、系统变量concurrent_insert。MyISAM存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1或2。
- 0 不允许并发操作
- 1 如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。
- 2 无论MyISAM表中有没有空洞,都允许在表尾并发插入记录
4、调节MyISAM的调度行为。
- 通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。
- 通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。
- 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。
5、一张MyISAM表由.frm, .myd, myi三个文件组成。
- .frm 表结构
- .myd 表数据
- .myi 表索引
6、linux下mysql数据库文件存放地址:/var/lib/mysql
Share on Facebook
Recent Comments