在生产环境里面 这几天查到有两个查询语句 锁住,导致后面好多语句都waiting lock
有 insert into 有 update 也有select 的 waiting lockUpdate xxx_table Set allmeter = allmeter + 5039 where shoe_id = 73854 select name,current_value,increment from sys_sequence where name = 'user_shoe' for update 获取seq这两个语句导致之前查mysql锁住了,问题1:
如何上面的sql语句有没有可以优化的地方?问题2:
在业务 sql 语句编写里面 有些什么好的方法 避免锁的等待?
有 insert into 有 update 也有select 的 waiting lockUpdate xxx_table Set allmeter = allmeter + 5039 where shoe_id = 73854 select name,current_value,increment from sys_sequence where name = 'user_shoe' for update 获取seq这两个语句导致之前查mysql锁住了,问题1:
如何上面的sql语句有没有可以优化的地方?问题2:
在业务 sql 语句编写里面 有些什么好的方法 避免锁的等待?
解决方案 »
- 如何删除数据库中的所有邮件地址?
- MYSQL数据库中简体中文和繁体中文字段的统计问题
- my sql语法问题
- 有方法没有在Windows 版的 MySQL的库里同时存在表 a 和表A?
- mysql 存储自定义线条!大家各显神通啊!
- id in (1,2,3)的问题
- 请哪位好人给一个mysql 5 的rpm包下载地址
- mysql:Host is not allowed to connect to this MySQL server
- innodb_flush_log_at_trx_commit & sync_binlog大家在生产环境中都怎么设置啊?
- 多表并联并且in很多个字段效率问题
- mysql 100W的数据表where 函数(字段)=函数(参数)要改成怎么写会查询非常快
- 使用hibernate 远程连接数据库失败
另外,用自己的表,比用auto_increment要有更多开销。语句1没有什么特别的。
语句2如果能改用auto_increment会好很多,如果设计分布式的sequence,可以用radis或memcached,性能会好不少。
再进一步就是做业务逻辑上的调整了。用乐观锁,使用timestamp或version number
建议在shoe_id 上创建索引。还有对name字段也创建索引。一般来说,这种单个没有多表关联的sql是速度很快的。阻塞一般是由于运行速度太慢,导致后面的一大堆sql都被阻塞了,所以通过上面的创建索引,应该可以加快查询速度,减少阻塞