做网站找实速,专业网站制作设计平台
首页 > 课堂 > 网站SEO优化 > 详情
网站标签 / Tags

mysql性能优化及in 与or 的差别

2019-01-20 05:05:48   来源:实速网络-网站建设|网站设计|网站优化|网站仿制|网站SEO|网站推广|空间域名|主机VPS|服务器|网站源码|网站模版   浏览: 次
mysql查询 中,in 与 or 的效率差不多,关键是否有索引。mysql in 查询的数据类型也会导致查询结果不相同,一般varchar 和int 查询时间相差不大,效率几乎相同。
如果in里面有之查询。建议使用join 替换in+子查询。使用连接(J

mysql查询 中,in 与 or 的效率差不多,关键是否有索引。mysql in 查询的数据类型也会导致查询结果不相同,一般varchar 和int 查询时间相差不大,效率几乎相同。


如果in里面有之查询。建议使用join 替换in+子查询。使用连接(JOIN)来代替子查询(Sub-Queries) mysql优化系列记录。


再说一下不同引擎的优化,myisam读的效果好,写的效率差,这和它数据存储格式,索引的指针和锁的策略有关的,它的数据是顺序存储的(innodb数据存储方式是聚簇索引),他的索引btree上的节点是一个指向数据物理位置的指针,所以查找起来很快,(innodb索引节点存的则是数据的主键,所以需要根据主键二次查找);myisam锁是表锁,只有读读之间是并发的,写写之间和读写之间(读和插入之间是可以并发的,去设置concurrent_insert参数,定期执行表优化操作,更新操作就没有办法了)是串行的,所以写起来慢,并且默认的写优先级比读优先级高,高到写操作来了后,可以马上插入到读操作前面去,如果批量写,会导致读请求饿死,所以要设置读写优先级或设置多少写操作后执行读操作的策略;myisam不要使用查询时间太长的sql,如果策略使用不当,也会导致写饿死,所以尽量去拆分查询效率低的sql,



innodb一般都是行锁,这个一般指的是sql用到索引的时候,行锁是加在索引上的,不是加在数据记录上的,如果sql没有用到索引,仍然会锁定表,mysql的读写之间是可以并发的,普通的select是不需要锁的,当查询的记录遇到锁时,用的是一致性的非锁定快照读,也就是根据数据库隔离级别策略,会去读被锁定行的快照,其它更新或加锁读语句用的是当前读,读取原始行;因为普通读与写不冲突,所以innodb不会出现读写饿死的情况,又因为在使用索引的时候用的是行锁,锁的粒度小,竞争相同锁的情况就少,就增加了并发处理,所以并发读写的效率还是很优秀的,问题在于索引查询后的根据主键的二次查找导致效率低;



相关热词搜索: 上一篇:山东公共资源交易网存在的问题及解决方案 下一篇:网站SEO推广对于企业网站的重要性