一、如果数据库使用了MyISAM引擎,读写操作是串行的,如果查询关联的表多Sql复杂,就会出现慢查询,慢查询时来了update或者insert都要等待,如果这时再来了select,由于select优先级低于更新插入操作,所以也要等开始的那个select执行完,这时候就很容易造成锁表。可以把concurrent_insert设置为2,0为不许读写并发,1为表中无空洞,允许在一个进程读表的同时,另一个进程从表尾插入记录,默认。2为不管表中有无空洞,都允许从表尾插入。这样不好的是,由于每次都是从表尾插入,不再判断表的空洞是否能容下新插入数据,数据库存储空间会出现文件碎片,需要定期使用OPTIMIZE TABLE清理。
InnoDB引擎的机制决定了,每次都从表尾的空间插入,不会产生空洞,总是连续的存储空间。
如果可以降低写操作的优先级,则使用low-priority-updates=1,否则使用 max_write_lock_count=1
二、MyISAM引擎不支持数据库事务和外键的关联关系,如果你的SQL语句有创建外键的语句,执行并不会报任何错误,但你查看外键的时候,数据库中并不存在,级联的删除和更新当然没有,那是因为你使用的数据库引擎是MyISAM。