mysql排序

MySQL优化分析

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL 单值索引:即一个索引只包含单个列,一个表可以有多个单列索引 唯一索引:索引列的值必须唯一,但允许有空值 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 复合索引:即一个索引包含多个列 数据库慢主要体现在两方面:检索慢、排序慢 检索慢:大规模io,可以用linux命令 iostat -d 2 3 来查看。 排序慢:排序慢导致CPU消耗,可以使用linux命令 iostat -c 2 3 来查看。 故而,数据库慢,要么是IO慢,要么是CPU慢。(导致数据库慢的硬件层次上就这两个因素) 建立索引一定要注意:一张表的索引最多最多建立5个。 单值索引: create index idx_user_name on user(name); create index idx_user_weixin on user(weixin); 唯一索引: 索引列的值必须唯一,但允许有空值。 create unique index unique_idx_user_weixin on user(weixin); 复合索引: create index idx_user_name_age on user(name,age); 5.Explain explain sql语句之后会出现一个表,该表共有10个字段,分别为: id,select_type,table,type,possible

MySQL报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

匿名 (未验证) 提交于 2019-12-02 22:06:11
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC' 如果你用的数据库是MySQL8.0,那么请将group by 改为order by,因为在8.0之前,group by 包含using filesort,而8.0开始是没有的,为了避免这种问题,8.0开始除了索引替换排序的优化思路之外的相关排序,我们都必须使用order by来进行。 来源:博客园 作者: 珞裳夜色 链接:https://www.cnblogs.com/lsys/p/11777129.html

mysql语句:group by后显示using filesort之解决方法

匿名 (未验证) 提交于 2019-12-02 22:02:20
一、解决方法 group by 语句的时候避免出现 filesort , 那么只需在其后追加 order by null group by ... order by null 二、说明 group by 本质是 先分组后排序 【 而不是先排序后分组 】。 group by column group by column order by null 则默认按照 column 分组,然后根据标的主键 ID 升序排列 文章来源: https://blog.csdn.net/weixin_43329834/article/details/93979663

SQL优化指南

匿名 (未验证) 提交于 2019-12-02 21:59:42
慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。 SHOW VARIABLES LIKE 'slow%' 以我刚安装的mysql5.7为例 查询结果是这样子的:    slow_launch_time :表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加    slow_query_log :是否开启慢查询日志 ON开启,OFF关闭 默认没有开启    slow_query_log_file :日志保存路径 SHOW VARIABLES LIKE 'long%'    long_query_time :达到多少秒的sql就记录日志 客户端可以用set设置变量的方式让慢查询开启,但是个人不推荐,因为真实操作起来会有一些问题,比如说,重启MySQL后就失效了,或者是开启了慢查询,我又去改变量值,它就不生效了。 编辑MySQL的配置文件: vim / etc / my . cnf 加入如下三行:    slow_query_log = ON   slow_query_log_file = /var/ lib / mysql / localhost - centos - slow . log   long_query_time = 3

八、详解排序和分页

旧时模样 提交于 2019-12-02 21:46:28
前言: []包含的表示可选,|符号分开的表示可选其一。 本章内容 详解排序查询 详解limit limit存在的坑 分页查询中的坑 一、排序查询(order by)   select 字段名 from 表名 order by 字段 1 [asc|desc],字段 2 [asc|desc];      需要排序的字段跟在order by之后;   asc|desc表示排序的规则,asc:升序,desc:降序,默认为asc;   支持多个字段进行排序,多字段排序之间用逗号隔开。   单字段排序: select * from test2 order by a asc;    多字段排序: select * from stu order by age desc,id asc;      按别名排序: select age '年龄',id as '学号' from stu order by 年龄 asc,学号 desc;      按函数排序: SELECT id 编号,birth 出生日期, year (birth) 出生年份,name 姓名 from student ORDER BY 出生年份 asc,id asc;      where之后进行排序:select a.id 订单编号,a.price 订单金额 from t_order a where a.price>= 100

MySQL 性能优化总结

本小妞迷上赌 提交于 2019-12-02 10:53:54
一、影响mysql的性能因素 io: 磁盘IO、随机IO、网络IO 扫描行数 内存、临时表、key cache、query cache cpu:排序、分组查询、distinct查询 事务导致的表锁等 一条慢sql查询消耗的性能 > 1000条快查询消耗的性能。性能优化归根结底就是查询语句的优化,如何写出高效的查询语句呢? 对mysql的索引结构要有一定深度的了解,才能更好的写出高效的查询语句。 二、b+ tree结构索引的特点 b+tree 适应于全键值、键值范围或左前缀匹配查找 支持order by排序 b+ tree 索引不支持跳过索引中的列查找 三、hash结构索引特点 hash索引是基于hash表实现。 全值匹配、只有全键值精确匹配才可以查到,也就是说只有等值比较,如:=、in 不支持范围、部分匹配查找 不支持排序 当hash冲突较多的话,索引维护代价较高,查询性能也会受到影响。 四、聚簇索引的select,没有union和子查询 MySQL innodb存储引擎是基于聚簇索引构建而来,一般是基于主键id构建的b+tree索引和数据行而来, 如果表不存在主键,那么mysql会自动选择其他的非空的索引字段;如果非空索引字段不存在,而mysql内部会自动生成内部的唯一标识作为主键构建聚簇索引。 插入速度严重依赖于插入顺序。当主键不是数值自增长类型,而是varchar类型

MySQL高级

别等时光非礼了梦想. 提交于 2019-12-02 09:24:13
文章目录 MySQL高级 下载与安装 修改配置文件 设置字符集 mysql架构 连接层 服务层 引擎层 存储层 存储引擎 MyISAM和InnoDB 索引 索引优势 索引劣势 索引分类 基本语法 索引结构 需要创建索引的条件 不需要创建索引的情况 性能分析 MySQL Query Optimizer MySQL常见瓶颈 Explain explain字段解释 索引优化 索引分析 索引失效 注意 查询截取分析 查询优化 order by关键字优化 group by关键字优化 慢查询日志 慢查询日志查看与开启 日志分析工具mysqldumpslow 批量数据脚本 随机产生字符串 随机产生范围数字 存储过程批量插入数据 show profile 分析步骤 全局查询日志 mysql锁机制 锁的分类 三锁(表、行、页) 表锁(偏读) 表锁分析 行锁(偏写) 并发事务处理的问题 事务隔离级别 无索引行锁升级为表锁 间隙锁的危害 如何锁定一行 行锁分析 优化建议 页锁 主从复制 复制基本原理 复制基本规则 一主一从配置 MySQL高级 下载与安装 MySQL下载地址 安装 rpm -ivh MySQL-server-5.5.48-1.linux2.6.x86_64.rpm rpm -ivh MySQL-client-5.5.48-1.linux2.6.x86_64.rpm 修改初始密码 /usr

多表优化及避免索引失效原则 及 一些其他优化方法

廉价感情. 提交于 2019-12-02 05:28:53
左连接: select * from teacher t left outer join course2 c on t.cid = c.cid where cname ='java' 索引往哪张表加? -- 小表驱动大表 where 小表.x = 大表.y ex: 小表:10 大表:300 但是 对于 双层循环 当编写 on t.cid = c.cid 语句时 将数据量小的表放左边 索引建立在经常使用的字段 一般情况 左外连接 给左表加索引 右外连接 给右表加索引 三表优化 a.小表驱动大表 b.索引建立在经常查询的字段上 避免索引失效的一些原则 a.复合索引,不要跨列或无序使用 最佳左前缀 b复合索引.尽量使用全索引匹配 c.不要在索引上进行任何操作(计算,函数,类型转换)否则索引失效 对于复合索引,如果左边失效,右侧全部失效 假设有一索引(a,b,c) 例如 b失效,则b,c也失效 复合索引不能使用不等于 (!= <>)或is null 或 is not null 否则自身以及右侧所有全部失效 sql优化 是一种概率层面的优化 至于是否实际使用了我们的优化 要通过 explain 来进行推测 体验概率情况(< > =): 原因是服务层中有sql优化器,可能会影响我们的优化 -- 复合索引中如果有> 则自身和右侧索引全部失效 一般而言,范围查询(> < in )之后的索引都会失效

Mysql_索引

有些话、适合烂在心里 提交于 2019-12-02 05:15:46
一、MYSQL的索引 索引(Index):帮助Mysql高效获取数据的一种数据结构。用于提高查找效率,可以比作字典。可以简单理解为排好序的快速查找的数据结构。 索引的作用:便于查询和排序(所以添加索引会影响where 语句与 order by 排序语句)。 在数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据。这样就可以在这些数据结构上实现高级查找算法。这些数据结构就是索引。 索引本身也很大,不可能全部存储在内存中,所以索引往往以索引文件的形式存储在磁盘上。 我们平时所说的索引,如果没有特别指明,一般都是B树索引。(聚集索引、复合索引、前缀索引、唯一索引默认都是B+树索引),除了B树索引还有哈希索引。 优点: A、提高数据检索效率,降低数据库的IO成本 B、通过索引列对数据进行排序,降低了数据排序成本,降低了CPU的消耗。 缺点: A、索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也是占用空间的。 B、对表进行INSERT、UPDATE、DELETE操作时,MYSQL不仅会更新数据,还要保存一下索引文件每次更新添加了索引列字段的相应信息。 在实际的生产环境中我们需要逐步分析,优化建立最优的索引,并要优化我们的查询条件。 索引的分类: 1、单值索引 一个索引只包含一个字段,一个表可以有多个单列索引。 2、唯一索引

mysql--索引

痴心易碎 提交于 2019-12-02 05:07:28
转载自https://www.cnblogs.com/zslli/p/8946145.html InnoDb页存储结构 我们可能有很多熟悉的数据库储存引擎,比如说Inoodb,MyISAM,Memory。每一种储存引擎对于数据的持久化可能是不同的,比如说我们的Memory储存引擎的数据都是不会写进磁盘的,所有的数据是保存在内存中的,也就意味着如果我们的服务器进行重启以后,数据是不会被进行保存的。当然,因为MySQL数据库默认的储存引擎是使用的Inoodb,所以我们在这里是需要重点介绍这个储存引擎的。 Inoodb储存引擎是把数据储存在磁盘里面的储存引擎,它在内存和磁盘的交互中使用的是页这个数据单位。我们都知道一个事情就是我们在对磁盘进行访问的时候速度是非常慢的,所以我们肯定是不能接受一条数据一条数据的进行取用。所有数据划分为若干页,一个数据页是可以保存16kb的数据,也就是说我们每次在进行数据访问的时候是一次性的16kb数据。 InnoDb页中记录存储结构 数据页双向链表和页内记录单向链表 聚簇索引 索引的查找就是通过一层一层的定位来实现的,最上层的页我们称之为根节点,中间的我们称之为内节点,最底层的我们称之为叶子节点。我们就是通过页中的槽二分法快速的定位数据所在页或者组中,我们在进行遍历查找。 二级索引 二级索引和聚簇索引的区别就是叶子节点不包括完整的数据。