您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MySQL ORDER BY排序语句用法与优化

2024/3/22 15:31:40发布28次查看
在mysql中order by keyword是用来给记录中的数据进行分类的,下面我来总结了order by语句利用索引进行优化的方法。
mysql order by语法
 代码如下 复制代码
 select column_name(s) from table_name order by column_name
注意:sql语句是“字母大小写不敏感”的语句(它不区分字母的大小写),即:“order by”和“order by”是一样的。
mysql order by案例
下面的例子:从“person”表中选取所有记录,并将“age”列进行分类:
 代码如下 复制代码
上面的代码将输出下面的结果:
glenn quagmire 33
peter griffin 35
按照升序或者降序进行分类排列
如果你使用了“order by”关键词,所有记录将按照默认的升序进行排列(即:从1到9,从a到z)
使用“desc”关键词可以制定所有的数据按照降序排列(即:从9到1,从z到a):
双击代码全选 123 select column_name(s) from table_name order by column_name desc
mysql order by根据两列进行分类
很多时候,我们需要同时根据两列内容(或者更多列)来对数据进行分类。当指定的列数多于一列时,仅在第一列的值完全相同时才参考第二列:
双击代码全选 123 select column_name(s) from table_name order by column_name1, column_name2
通过索引优化来实现mysql的order by语句优化:
1、order by的索引优化。如果一个sql语句形如:
 代码如下 复制代码
select [column1],[column2],…. from [table] order by [sort];
在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。
2、where + order by的索引优化,形如:
select [column1],[column2],…. from [table] where [columnx] = [value] order by [sort];
建立一个联合索引(columnx,sort)来实现order by 优化。
注意:如果columnx对应多个值,如下面语句就无法利用索引来实现order by的优化
 代码如下 复制代码
select [column1],[column2],…. from [table] where [columnx] in ([value1],[value2],…) order by[sort];
3、where+ 多个字段order by
 代码如下 复制代码
select * from [table] where uid=1 order x,y limit 0,10;
建立索引(uid,x,y)实现order by的优化,比建立(x,y,uid)索引效果要好得多。
mysql order by不能使用索引来优化排序的情况
* 对不同的索引键做 order by :(key1,key2分别建立索引)
 代码如下 复制代码
select * from t1 order by key1, key2;
* 在非连续的索引键部分上做 order by:(key_part1,key_part2建立联合索引;key2建立索引)
 代码如下 复制代码
select * from t1 where key2=constant order by key_part2;
* 同时使用了 asc 和 desc:(key_part1,key_part2建立联合索引)
 代码如下 复制代码
select * from t1 order by key_part1 desc, key_part2 asc;
* 用于搜索记录的索引键和做 order by 的不是同一个:(key1,key2分别建立索引)
 代码如下 复制代码
select * from t1 where key2=constant order by key1;
* 如果在where和order by的栏位上应用表达式(函数)时,则无法利用索引来实现order by的优化
 代码如下 复制代码
select * from t1 order by year(logindate) limit 0,10;
特别提示:
>mysql一次查询只能使用一个索引。如果要对多个字段使用索引,建立复合索引。
>越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和cpu缓存中都需要更少的空间,处理起来更快。
>简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在mysql中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储ip地址。
>尽量避免null:应该指定列为not null,除非你想存储null。在mysql中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
>在order by操作中,mysql只有在排序条件不是一个查询条件表达式的情况下才使用索引。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product