Mysql排序规则
MySQL新建数据库时,字符集和排序规则如何选择?本文来简单总结一下。字符集与排序规则一、字符集字符集:就是用来定义字符在数据库中的编码的集合。常见的字符集:utf8、Unicode、GBK、GB23...
2024.11.13在编写SQL 语句时常常会用到 order by 进行排序,那么排序过程是什么样的?为什么有些排序执行比较快,有些排序执行很慢?又该如何去优化?
索引排序索引排序指的是在通过索引查询时就完成了排序,从而不需要再单独进行排序,效率高。索引排序是通过联合索引实现的。因为联合索引是从最左边的列开始起按大小顺序进行排序,如下图。
比如现在查询条件是 where sex=1 order by name,那么查询过程就是会找到满足 sex=1 的记录,而符合这条的所有记录一定是按照 name 排序的,所以也不需要额外进行排序。而如果是 where sex >1 order by name,那么根据 sex>1 得到的记录 sex 值并不是固定值,所以得到的记录是按照 sex,其次才是 name 进行排列的。也就没有实现索引排列。
额外排序额外排序可以分别两种方式来看待。
按执行位置划分1、Sort_BufferMySQL 为每个线程各维护了一块内存区域 sort_buffer ,用于进行排序。sort_buffer 的大小可以通过 sort_buffer_size 来设置。 如果用于排序的记录字段总长度小于 sort_buffer_size 便使用 sort_buffer 排序;如果超过则使用 sort_buffer + 临时文件进行排序。
2、Sort_Buffer + 临时文件MySQL 会使用临时文件搭配 Sort_Buffer 进行排序。主要是使用归并算法来得出最终排序后的结果。 临时表会存储主要数据(如果),sort_buffer 存储 rowid(表示行记录的位置标识,主键存在就是主键,不存在会自动创建一个6字节的唯一标识)和用于排序的数据。
临时文件种类 :临时表种类由参数 tmp_table_size 与临时表大小决定,如果内存临时表大小超过 tmp_table_size ,那么就会转成磁盘临时表。因为磁盘临时表在磁盘上,所以使用内存临时表的效率是大于磁盘临时表的。
1、内存临时表
2、磁盘临时表磁盘临时表默认使用的是 InnoDB,如果想要切换执行引擎,可以修改参数 internal_tmp_disk_storage_engine。
按执行方式划分执行方式是由 max_length_for_sort_data 参数与用于排序的单条记录字段长度决定的,如果用于排序的单条记录字段长度
MySQL新建数据库时,字符集和排序规则如何选择?本文来简单总结一下。字符集与排序规则一、字符集字符集:就是用来定义字符在数据库中的编码的集合。常见的字符集:utf8、Unicode、GBK、GB23...
2024.11.13概述在使用order by时,经常出现Using filesort,所以对于此类sql语句我们需要去尽力优化,使其尽量使用Using index。那么,我们对于这类型的语句我们怎么去做优化呢?因为这一...
2024.11.12邮件发送原理telnet命令模拟邮件发送:1、cmd命令下telnet连接上QQ的smtp服务器telnet smtp.163.com 25遇到问题以及解决办法:telnet命令错误控制面板下wind...
2024.11.12概述今天介绍下mysql视图方面的内容,通俗的讲,视图就是一条select语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。01特性视图是对若干张基本表的引用...
2024.11.12MySQL 的默认排序规则取决于字符集。对于拉丁字母表,MySQL 的默认排序规则是“latin1”,它是一种基于 ASCII 码的排序规则。对于 Unicode 字符,MySQL 的默认排序规则是“...
2024.11.12