MySQL_MySQL查询截取分析之order by关键字排序优化_mysql 截取order by-程序员宅基地

技术标签: 子句查询  mysql  查询优化  数据库  

1.引入

   在SQL的查询中,我们经常会使用到关键字:order by,那么我们在使用order by的时候会出现使用文件类排序的情况,那么这一个时候的SQL性能其实是不好的。那么下面呢,我们就一起来说说如何实现sql的关键字order by的优化问题。其实就是说一个问题,如何把order by查询结果由:using filesort优化到using index。

 

2.创建测试内容准备

(1).创建测试使用数据库表:book

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT,
  `book_name` varchar(50) NOT NULL,
  `book_author` varchar(50) NOT NULL,
  `book_price` decimal(10,0) DEFAULT NULL,
  `book_pct` varchar(50) DEFAULT NULL,
  `book_pub` varchar(50) DEFAULT NULL,
  `book_num` int(10) NOT NULL,
  `book_intro` varchar(255) DEFAULT NULL,
  `book_record` varchar(50) DEFAULT NULL,
  `bookstore_id` int(11) NOT NULL,
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

(2).插入数据并查询

(3).创建索引,在book_name,book_price上创建索引

 

3..查询分析测试

(1).按照book_price排序查询,直接查询排序

(2).按照book_price排序查询,并设置where条件

(3).按照book_name进行排序,并设置where条件

(4).按照book_name.book_price进行排序。

(5).特殊情况的排序,直接按照创建的的索引进行数据的排序操作。

总结:

       MySQL数据库对于查询数据的时候的排序,一般情况会使用俩种,一种是index,另一种是filesort.其中index的效率高,它是指

MySQL数据库扫描索引本身完成的排序;filesort效率比较低,它是指对文件进行排序。那么也就是说我们在写查询排序SQL的时候

需要的就是让它使用index的方式,那么order by在什么样子的情况下会使用index呢?一般的情况如下俩种就会使用到index:

 

1.order by语句使用索引的最左前列。

2.使用where 子句和 order by 子句条件组合满足索引最左前列。

 

      使用index排序是使用了我们所创建的索引本身来进行排序,那么为什么使用filesort就会比index慢呢?其实MySQL数据库在使用filesort的时候它就要启动双路排序和单路排序。

      双路排序:扫描俩次磁盘,然后读取到数据。从获取的数据中进行buffer排序,然后再去读取其他的字段。

     单路排序:对磁盘进行一次扫描,然后读取数据。这一种的效率会更高一下,但是由于它一次读取就需要把数据操作完成,所以它更加的耗费资源。但是效率更快。

     但是在使用单路的时候就会有一个问题,那就是如果计算机的配置信息等足够,那么MySQL数据库在进行操作的时候不能够一次性使用单路排序。那么这样的单路排序就会进行多次。这样的效率还不如双路排序的效率。那么这一个时候怎么解决呢?一般情况我们调整我们MySQL的配置文件信息就可以了:

   把配置文件中的sort_buffer_size和max_length_for_sort_data的参数值大小调大。

    

 

3.总结:如何提升order by的查询速度

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013185175/article/details/106651942

智能推荐

Java多线程之CountDownLatch、CyclicBarrier、Semaphore与Exchanger_countdownlatch、cyclicbarrier、exchanger、semaphore区别-程序员宅基地

文章浏览阅读248次。Java多线程有Runnable、Thread、Callable、线程池、synchronized、volatile、Lock等可以直接使用。也有线程的直接实现可用。下边主要讲下CountDownLatch、CyclicBarrier与Semaphore。CountDownLatch从名字可以知道,是个倒计数锁。通过一个计数器,每个线程完成则减一,并在原地等待。直至减到0,开始后续工作..._countdownlatch、cyclicbarrier、exchanger、semaphore区别

Jmeter使用Dubbo插件测试RPC接口_jmeter怎么调用rpc接口-程序员宅基地

文章浏览阅读490次。①、paramType:参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称;Protocol:使用的dubbo协议,包括dubbo、rmi、hessian、webservice、memcached、redis,根据自己的协议类型选择对应的选项即可;Version:版本,dubbo不同版本之间差异较大,不同版本之间不能互相调用,这里指定dubbo版本,是为了方便识别和说明;._jmeter怎么调用rpc接口

fieldset标签和legend标签_<fieldset>和<legend>标签-程序员宅基地

文章浏览阅读5.6k次,点赞6次,收藏27次。在表单中,我们可以使用fieldset标签来给表单元素进行分组。其中,legend标签用于定义某一组表单的标题。语法: &lt;fieldset&gt; &lt;legend&gt;表单组标题&lt;/legend&gt; ...... &lt;/fieldset&gt;使用fieldset和legend标签有两个作用:1.增强表单的语义。2.可以定义fields..._和标签

鸿蒙os整体战略发布会,“鸿蒙OS”能否用于手机?华为宣布:就看明天的整体战略!...-程序员宅基地

文章浏览阅读131次。原标题:“鸿蒙OS”能否用于手机?华为宣布:就看明天的整体战略!在今年8月9日的华为HDC全球开发者大会上,华为发布了自主研发的操作系统“鸿蒙”,英文名为“HarmonyOS”。根据官方介绍,鸿蒙OS是一种基于微内核的全场景分布式OS系统,采用分布式架构,拥有天生流畅、内核安全及生态互享等优势。 鸿蒙OS能够实现模块化解耦,在应对不同平台时可以弹性部署,能够极其灵活的配全场景丰富终端形态,它还拥有..._harmony os下一步战略

UNP 学习笔记 3:基本套接字编程_套接字bind后一定要getsockname吗-程序员宅基地

文章浏览阅读392次。为了方便起见,我直接用 python 来学这一章(因为 Cpython 这方面接口基本一致),编写方便!这一章和之前的套接字与传输层的笔记的区别是讲的更多是怎么使用他们,同时配备部分函数对应的 TCP 行为,主要是涉及错误的部分。socket 这里一般 family 和 type 就决定了 protocol,所以 arg3 直接留 0 就可以自动匹配。但是比如你可能可以用 INET + STREAM 来选用 SCTP 但是我们默认是匹配 TCP,SCTP 的首选是 INET+SEQPAC.._套接字bind后一定要getsockname吗

【Yolact数据集制作-labelme使用与转coco详解】_labelme2coco-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏42次。开头总爱瞎掰两句,简单介绍下主要是为了做实例分割时需要用到labelme转coco数据集,此处写一个详细教程,作为yolact实战贴 的补充。_labelme2coco

随便推点

VS2017离线下载、安装教程_vs2017离线安装包-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏29次。扣扣技术交流群:4601894831.制作Visual Studio 2017 (VS 2017) 离线安装包Visual Studio 2017版本,由于版本更新速度加快和与第三方工具包集成的原因,微软研发团队没有为这个版本提供离线下载的安装文件。如果用户处在一个与外网隔离的网络环境中,则必须首先自行创建理想安装包。下面在参考微软官方文档(Create an offline inst..._vs2017离线安装包

类似QQ截图的抓取图片代码_能截到别人照片的代码-程序员宅基地

文章浏览阅读1.1k次。演示地址http://deepliquid.com/projects/Jcrop/demos.php_能截到别人照片的代码

Swift 4官方文档中文版/ Basic Operators(上)_six basic operators-程序员宅基地

文章浏览阅读4k次。翻译Apple官方文档: The Swift 4 Programming Language_six basic operators

vue-cms(2)_cms模版 vue-程序员宅基地

文章浏览阅读362次。srcdist.babelrcpackage.jsonwebpack.config.jsREADME.mddist 里有:bundle.jsindex.html: div.#id <script src="bundle.js">src 里有:组件 图片 装库的lib组件分:货物 新闻 图片 subcomponents..._cms模版 vue

windows ALPC简单研究-程序员宅基地

文章浏览阅读8.6k次,点赞2次,收藏10次。0x00本文是对ALPC的简单研究,由于时间有限,还有很多细节没有搞清楚,还有很多疏漏。希望能起到抛砖引玉的作用,能找到高手讨论学习。ALPC(Advanced/Asynchronous Local Procedure Call),是微软发展出来替代LPC,用于本机RPC的一种C/S模型技术。但是对用户来说,能看到只有RPC概念,很少能看到ALPC。我们看一个典型的ALPC同步调用堆栈:..._alpc

Client——Server_qq speed src client server-程序员宅基地

文章浏览阅读169次。Server程序:public class Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(8081);Socket client = server.accept();InputStream i = client.g_qq speed src client server

推荐文章

热门文章

相关标签