sql优化操作
来源:互联网 发布:西单附近美食知乎 编辑:程序博客网 时间:2024/04/18 14:48
insert优化:
1,当同一个用户插入很多行的时候,应该尽量使用多个表的insert语句,这种方式将大大减少客户端与数据库之间的连接,关闭等等消耗,因为每一次插入数据都会执行连接数据库,关闭数据库等等操作;如下:
insert into test valus(1,2),(3,4),(5,6),(7,8)................
2,如果是不同的用户插入很多行,可以使用insert delayed 语句得到更高的速度,该参数表示立刻执行,这样就会把所有的插入数据放在内存的队列中,并没有真正地写入磁盘中,而是用low_priority恰好相反,在所有的用户对表的读写完成后才会进行插入;
3,将索引文件和数据文件分在不同的·1磁盘上存放;
order by 优化:
1,可以在order by 字段上建立索引,这样,order by效率就会提高;
2,如果一个sql语句里面含有where 条件还有order by 条件的话,可以将where条件的字段和order by 条件的字段做一个联合索引;
但是如果是where 条件里面是in某些值的话,不能实现联合索引;
3,如果where条件加上多个order by条件可以在where条件和多个order by 上建立索引;
group by 优化:
如果group by 仅仅是为了获取符合条件的唯一数据,而不做排序的话,可以考虑使用 group by ** order by null 效率会高很多;
嵌套查询优化:
很多时候对于一些子查询可以使用join查询来代替,如select * from ticket where id in (select ticketid from scenery) 可以使用select * from ticket left join scenery on ticket.id = scenery.ticketid where scenery.ticketid is null;联表查询会比子查询效率高很多;
or条件查询:
对于or条件查询,如果要利用索引,则or之间的每个条件列都必须使用索引,如果没有索引,应该考虑增加索引;
优化分页查询:
1,分页查询其实是一个很消耗资源的操作,因为如同下面的分页操作,limit 100,10,这样的排序操作会首先扫描前面的100条数据,然后不使用,等着下面的10条数据;所以有时候分页操作可以考虑其他的思路,比如select id,name from ticket order by createdtime limit 100,10 可以考虑用下面的语句更换select t.id,t.name from ticket t inner join (select * from id from ticket order by createdtime limit 100,10)b on a.id = b.id;这种语句可以减少可能少的数据;
2,如果分页里面还按照某个字段排序的话,可以把limit查询转换成对于某个位置的查询, 例如我们可以将上一次查询的最后一个数存起来,下一页的时候就从这个值开始取下面一页,如,select 8 from ticket where id < 300 order by id desc limit 10 这样就会效率高恒多,特别是到页数很多的时候效率能够上升几十倍;
临时表的使用:1,善于使用mysql临时表,当我们的sql语句里面含有group by 和 order by 并且两个字段不一样的时候,使用临时表
2,在join查询的时候 在where条件或者order by ,group by 的条件不是联表的第一个表的列的时候应该使用临时表;
3,ORDER BY中使用了DISTINCT关键字 ORDERY BY DISTINCT(price)时使用临时表;
4,SELECT语句中指定了SQL_SMALL_RESULT关键字 SQL_SMALL_RESULT的意思就是告诉MySQL,结果会很小,请直接使用内存临时表,不需要使用索引排序 SQL_SMALL_RESULT必须和GROUP BY、DISTINCT或DISTINCTROW一起使用
5,表包含TEXT或者BLOB列可以考虑使用磁盘临时表;
一些sql提示:
1,可以使用use index 写在查询语句的后面来提示你希望该sql使用什么样的索引列表,就可以让sql优先考虑用这个索引。
SELECT *** FROM TABLE USE INDEX(key_list)] WHERE ……对于这个key_list 可以是各种单一索引,也可以是复合索引;
2,可以使用ignore index 写在查询语句的后面来提示你忽略该sql使用什么样的索引列表,就可以让sql不再考虑他的索引。
SELECT *** FROM TABLE IGNORE INDEX(key_list)] WHERE ……对于这个key_list 可以是各种单一索引,也可以是复合索引;
3,可以使用force index 写在查询语句的后面来提示你强制该sql使用什么样的索引,就可以让sql不再考虑他的索引。
SELECT *** FROM TABLE FORCE INDEX(key_list)] WHERE ……对于这个key_list 可以是各种单一索引,也可以是复合索引;
- SQL优化(操作符)
- SQL数据库操作优化
- sql优化操作
- SQL的优化操作
- SQL优化-操作符篇
- sql操作的部分优化
- SQL优化之操作符优化
- SQL优化之操作符篇
- SQL优化之操作符篇
- 优化批量更新,新增SQL操作
- SQL优化之操作符篇
- SQL批量操作性能优化方案
- 【sql查询与优化】3.操作多个表
- sql优化的具体解释和操作
- SQL语句优化技术分析 操作符优化
- Oracle SQL语句之操作符优化--优化技术分析
- mysql基础操作、sql技巧和sql的常见优化
- SQL Server 并行操作优化,避免并行操作被抑制而影响SQL的执行效率
- 深入分析网络编程中踩过的坑
- hdu 2112 HDU Today 优先队列优化的Dijkstra+map
- 报错:Link of class 'Lcom/.../PersistentConnectionListener;' failed ...VFY: unable to resolve new-insta
- php JbGraph
- Bootstrap页面模板
- sql优化操作
- 前端随记
- 学习C风格字符串
- 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
- 文言字词的理解
- Java Map容器小示例
- 温故知新-ViewPager学习笔记
- linux常用命令用法小结
- String为什么是不可变的