创建表&创建索引

create table tbl1 (

id int unique, sname varchar(50),

index tbl1_index_sname(sname desc)

);

在已有的表创建索引语法

create [unique|fulltext|spatial] index 索引名 on 表名(字段名 [长度] [asc|desc]);

MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。

通过索引优化来实现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不能使用索引来优化排序的情况

1. 对不同的索引键做 ORDER BY :(key1,key2分别建立索引)

SELECT * FROM t1 ORDER BY key1, key2;

2. 在非连续的索引键部分上做 ORDER BY:(key_part1,key_part2建立联合索引;key2建立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;

3. 同时使用了 ASC 和 DESC:(key_part1,key_part2建立联合索引)

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

4. 用于搜索记录的索引键和做 ORDER BY 的不是同一个:(key1,key2分别建立索引)

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

5. 如果在WHERE和ORDER BY的栏位上应用表达式(函数)时,则无法利用索引来实现order by的优化

SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10;

特别提示:

1>mysql一次查询只能使用一个索引。如果要对多个字段使用索引,建立复合索引。

2>在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。

以上就是MySQL利用索引优化ORDER BY排序语句的方法的详细内容,更多关于MySQL 优化ORDER BY排序语句的资料请关注云海天教程其它相关文章!

原文链接:https://www.pythontab.com/html/2018/mysql_0123/1230.html

mysql key value 排序_MySQL利用索引优化ORDER BY排序语句的方法相关推荐

  1. mysql order by 索引名字_MySQL如何利用索引优化ORDER BY排序语句

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...

  2. MySQL如何利用索引优化ORDER BY排序语句

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...

  3. mysql字符串索引如何排序_MySQL 建立索引的时候如何排序?

    以下回复可能有需要更正的地方 "表引擎在 innodb 的情况下建立 age.sex 的联合索引即可,innodb 会在建立索引时生成 btree 数据结构,这个数据结构上会隐式的加上主键& ...

  4. mysql左对齐原则_Mysql学习,这21个SQL语句优化规范方法你知道吗

    前言 每一个好习惯都是一笔财富,本文分SQL后悔药, SQL性能优化,SQL规范优雅三个方向,分享写SQL的21个好习惯,谢谢阅读,加油哈~ github地址,感谢每颗star  github.com ...

  5. mysql key reads 参数_MySQL参数性能优化

    案例1:该案例来自一个不是特别繁忙的服务器 table_cache – 512 open_tables – 103 opened_tables – 1273 uptime – 4021421 (mea ...

  6. mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程

    MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描.利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作.当索引的顺序与ORDER BY中的列顺 ...

  7. mysql order by 多个字段 索引_mysql 索引优化order by 语句

    MySql创建索引时支持ASC或DESC排序. 下面举例 创建表时同时创建索引降序排序(sname 字段上普通索引降序) create table tbl1 ( id int unique, snam ...

  8. MySQL-索引优化篇(3)_利用索引优化锁

    文章目录 生猛干货 官方文档 利用索引优化锁 为什么索引能优化锁 演示 无索引的情况 (获取不同的数据 发生了阻塞) 有索引的情况 (获取不同的数据 未阻塞) 搞定MySQL 生猛干货 带你搞定MyS ...

  9. 查看mysql数据库 数据量大小和索引数据大小以及行数的方法

    查看mysql数据库 数据量大小和索引数据大小以及行数的方法 查看一个数据中所有表的相关信息: (1)可以在命令下使用show table status \G命令查看: (2)如果想知道MySQL数据 ...

最新文章

  1. Java之【线程通信】--标志位练习
  2. 工作147:外部that
  3. java按钮陷下去_付费?广告?捐款?如何让开源软件活下去?
  4. 51单片机学习笔记_2 LED 模块
  5. 24小时在线要饭网系统源码 全开源
  6. WINDOWS图片和传真查看器找不到
  7. 论文常用图表三:盒图 Boxplot【MATLAB】
  8. golang使用image包及draw.Draw合成图片
  9. SharePoint 网站的导入导出
  10. ets交易软件测试简历,ETS工具使用指南
  11. u盘启动怎么修复计算机,计算机黑屏怎么办 如何使用u盘启动制作系统
  12. 【Frobenius norm(弗罗贝尼乌斯-范数)(F-范数)】
  13. 5G技术—5G网络架构及关键技术详述测试题目
  14. 硝烟中的 Scrum 和 XP-我们如何实施 Scrum
  15. macApp开发碰到的坑
  16. 新学期可以制定目标计划并提醒的便签软件是哪款?
  17. 信息学奥赛真题解析(笨鸟)
  18. 2款2.4G蓝牙PCB天线尺寸(来自TI)
  19. 关于嵌入式Qt5配置环境变量导致鼠标显示与隐藏
  20. python爬取饿了么外卖商家数据_python爬饿了么外卖数据(1)

热门文章

  1. haproxy访问控制与动静分离
  2. PARSEC測试集的应用领域和working set的大小
  3. 分享一个java对xml,excel,jdbc.properties,读写文件,读写图片等实现(1)
  4. 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
  5. 动态SQL应用(成绩排名)
  6. 解决:error: Cannot find libmysqlclient_r under /usr/local/mysql.
  7. 内嵌iframe撑高父容器,底部有4px留白问题解决办法
  8. ADO.NET复习总结(5)--工具类SqlHelper 实现登录
  9. DOM修改元素的方法总结
  10. Xamarin.Android开发实践(十七)