I'm twiting

访问统计

free counters

mysql项目实践知识汇总(本文长期更新)

1、如果记录存在,则执行update,否则,插入一条新纪录

INSERT INTO table (a,b,c) VALUES (1,2,3)
  1. 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

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>