码迷,mamicode.com
首页 > 数据库 > 详细

sql数据过滤where

时间:2019-11-26 13:26:46      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:desc   alt   img   com   sql   英雄   不为   好的   有序性   

and or not between in 优先and

技术图片

 

 尽量在where 与order by上建立索引

MySQL中,支持两种排序方式:FileSort和Index排序。Index排序的效率更高,
Index排序:索引可以保证数据的有序性,因此不需要再进行排序。
FileSort排序:一般在内存中进行排序,占用CPU较多。如果待排结果较大,会产生临时文件I/
O到磁盘进行排序,效率较低。
所以使用ORDER BY子句时,应该尽量使用Index排序,避免使用FileSort排序。
当然具体优化器是否采用索引进行排序,你可以使用explain来进行执行计划的查看。
优化建议:
1、SQL中,可以在WHERE子句和ORDER BY子句中使用索引,目的是在WHERE子句中避免
全表扫描,ORDER BY子句避免使用FileSort排序。
精选留言
当然,某些情况下全表扫描,或者FileSort排序不一定比索引慢。但总的来说,我们还是要避免
,以提高查询效率。
一般情况下,优化器会帮我们进行更好的选择,当然我们也需要建立合理的索引。
2、尽量Using Index完成ORDER BY排序。
如果WHERE和ORDER BY相同列就使用单索引列;如果不同使用联合索引。
3、无法Using Index时,对FileSort方式进行调优。

练习 对英雄名称、主要定位、次要定位、最大生命和最大法力进行查询

筛选条件为:主要定位是坦克或者战士,并且次要定位不为空,同时满足最大生命值大于8000或者最大法力小于1500的英雄,并且按照最大生命和最大法力之和从高到底的顺序进行排序

SELECT role_main,role_assist,hp_max,mp_max FROM heros WHERE (role_main=‘坦克‘ OR role_main=‘次要定位‘)  
    AND (role_assist IS NOT NULL)
    AND (hp_max>8000 OR mp_max<1500)  ORDER BY (hp_max+mp_max)  DESC

 

sql数据过滤where

标签:desc   alt   img   com   sql   英雄   不为   好的   有序性   

原文地址:https://www.cnblogs.com/autointerface/p/11934585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!