mysql排序

mysql联合索引

核能气质少年 提交于 2019-11-28 10:44:33
命名规则:表名_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是 OR 关系,加索引不起作用 4、符合最 左 原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持 a | a,b | a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。 两个或更多个列上的索引被称作复合索引。 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。 所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。 http://blog.csdn.net/lmh12506

mysql联合索引

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-28 10:44:20
命名规则:表名_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是 OR 关系,加索引不起作用 4、符合最 左 原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持 a | a,b | a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。 两个或更多个列上的索引被称作复合索引。 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。 所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。 http://blog.csdn.net/lmh12506

mysql联合索引

谁说胖子不能爱 提交于 2019-11-28 10:43:03
mysql联合索引 命名规则:表名_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是 OR 关系,加索引不起作用 4、符合最 左 原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持 a | a,b | a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。 两个或更多个列上的索引被称作复合索引。 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。 所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。 http://blog.csdn.net

mysql联合索引

*爱你&永不变心* 提交于 2019-11-28 10:42:35
命名规则:表名_字段名 1、需要加索引的字段,要在where条件中 2、数据量少的字段不需要加索引 3、如果where条件中是 OR 关系,加索引不起作用 4、符合最 左 原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持 a | a,b | a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。 两个或更多个列上的索引被称作复合索引。 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。 所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。 http://blog.csdn.net/lmh12506

如何选择合适的MySQL数据类型

浪尽此生 提交于 2019-11-28 07:14:51
MySQL数据类型选择 一 .选择原则 更小的通常更好 :一般情况下选择可以正确存储数据的最小数据类型。越小的数据类型通常更快,占用磁盘,内存和CPU缓存更小。 简单就好 :简单的数据类型的操作通常需要更少的CPU周期。例如:整型比字符操作代价要小得多,因为字符集和校对规则(排序规则)使字符比整型比较更加复杂。 尽量避免NULL :尽量制定列为NOT NULL,除非真的需要NULL类型的值。因为可能为NULL列使得索引,索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在MySQL里也需要特殊处理。 二.选择具体数据类型 在选择列的数据类型时需要先选定合适的大类型,如:数字,字符串,时间等。 整数类型 有两种类型的数字:整数和实数。如果需要存储整数,可以选择一下集中数据类型: 数据类型 长度/字节 范围 说明 TINYINT 1 -2^7—2^7-1 整数类型可选UNSIGND属性 SMALLINT 2 -2^15—2^15-1 表示不允许为负值 MEDIUMINT 3 -2^23—2^23-1 这大致可以使整数上限提高一倍 INT 4 -2^31—2^31-1 例如UNSIGNED可以使TINYINT BIGINT 8 -2^63—2^63-1 存储的范围是0—255 *实数类型 实数是带有小数部分的数字。然而它们不只是存储小数部分

mysql排序后显示排序序号

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 05:10:47
网上找的一个比较齐全的解释案例,拿来记录一下 ① := 与 = 的区别 := 赋值的意思。在set update select 中表示赋值的意思,用的比较少一般都用=,但是在用变量实现行号时(比如本文标题获取排列序号),一定要用:=。 = 等于的意思,只有当set 和 update时,和:=的意思是一样的,表示赋值,其余情况都是等于的意思。 ② 用户变量 @ @rank 是对一个叫rank的参数进行赋值。对用户变量赋值有两种方式,一种直接用"="另一种用":="。其区别在于使用set命令对用户变量赋值时,两种方式都可以使用;当使用select语句对用户变量进行赋值时,只能使用“:=”方式,因为在select语句中,“=”被看做是比较操作符。 1、根据某字段按序排列并获取排序号。(当访问量相同的时候,按正常顺序,继续排序) SELECT a.*,@rank:=@rank + 1 AS rank_no FROM ( SELECT * FROM `logs` WHERE log_created> "2017-09-01" ORDER BY count DESC ) a, (SELECT @rank:= 0) b 或 SET @rank= 0; SELECT a.log_id,a.log_created,a.count,@rank:=@rank + 1 AS rank_no FROM (

mysql 复习

假如想象 提交于 2019-11-28 03:31:07
关系型数据库核心元素 数据行(一条记录) 数据列(字段) 数据表(数据行的集合) 数据库(数据表的集合,一个数据库中能够有n多个数据表) 为什么学习数据库 测试工程师的目的是找出软件的不足,并告诉开发工程师,出现问题的环境,操作步骤和输入输出的数据.而优秀的测试工程师,当测出问题后,还可以告诉开发团队,问题的原因和解决方案. 常用数据类型 整数,有符号范围(-2147483648 ~ 2147483647) ,无符号范围(0 ~ 4294967295) 小数: decimal, 如 decimal(5,2)表示共存 5位数,小数占2位,整数占3位. 字符串:varchar,范围(0~65533),如 varchar(3) 表示最多存3个字符,一个中文或一个字母都占一个字符 日期时间:datetime,范围(1000-01-01 00:00:00~ 9999-12-31 23:59:59), 如'202-01-01 12:29:59' 约束 主键(primary key):物理上存储的顺序,int类型,无符号,自动递增的,唯一的标识,其中数据不可重复 非空(not null): 此字段不允许填写空值 唯一(unique):此字段的值不允许重复 默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准 外键(foreign key):维护两个表之间的关联关系 基础知识

Mysql order by与limit混用陷阱

痴心易碎 提交于 2019-11-27 23:56:20
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。 比如现在有一张user表,表结构及数据如下: 现在想根据创建时间升序查询user表,并且分页查询,每页2条,那很容易写出sql为:select * from user order by create_time limit pageNo,2; 在执行查询过程中会发现: 1、查询第一页数据时: 2、查询第四页数据时: user表共有8条数据,有4页数据,但是实际查询过程中第一页与第四页竟然出现了相同的数据。 这是什么情况?难道上面的分页SQL不是先将两个表关联查询出来,然后再排好序,再取对应分页的数据吗??? 上面的实际执行结果已经证明现实与想像往往是有差距的,实际SQL执行时并不是按照上述方式执行的。这里其实是Mysql会对Limit做优化,具体优化方式见官方文档:https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html 这个是5.7版本的说明,提取几个问题直接相关的点做下说明。

MySQL从入门到精通之排序查询

落花浮王杯 提交于 2019-11-27 21:53:01
请先导入myemployees数据库 执行SQL脚本文件导入数据库 排 序 查 询 : \color{blue}排序查询: 排 序 查 询 : 按照某个或者某几个字段进行排序输出查找得到的结果。 语法: select 查询列表 from 表名 [where 筛选条件](可选) order by 排序的字段或表达式; 特点: 1、asc代表的是升序,可以省略,desc代表的是降序 2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段 3、order by子句在查询语句的最后面,除了limit子句(后面会介绍) 1、按单个字段排序 比如:按照工资降序排列(可能会扎了某些人的心) USE myemployees ; SELECT * FROM employees #按照工资降序排序 ORDER BY salary DESC ; 2、添加筛选条件再排序 比如:查询工资超过>=9000的员工信息,并按员工编号降序。 USE myemployees ; SELECT * FROM employees WHERE salary >= 90 ORDER BY employee_id DESC ; 3、按表达式排序 比如:查询员工信息 按年薪降序。 USE myemployees ; #首先年薪的计算公式为salary*12*(1+commission_pct)

MySQL

烂漫一生 提交于 2019-11-27 21:03:59
1.1 mysql 架构   mysql 分为 server 层和存储引擎 1.1.1 server层 连接器:管理连接权限验证 查询缓存:命中缓存直接换回查询结果 分析器:分析语法 优化器:生成执行计划,选择索引 执行器:操作索引返回结果 1.1.2 存储引擎 存储引擎负责数据的存储和提取;其架构是插件式的。innodb 在 mysql5.5.5 版本开始成为 mysql 默认存储引擎。 各存储引擎比对: InnoDB:支持事务,支持外键,InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据,不支持全文索引。 MyISAM:不支持事物,不支持外键,MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的,查询效率上 MyISAM 要高于 InnnDB ,因此做读写分离的时候一般选择用 InnoDB 做主机,MyISAM 做从机 Memory:有比较大的缺陷使用场景很少;文件数据都存储在内存中,如果 mysqld 进程发生异常,重启或关闭机器这些数据都会消失。 1.1.3 sql 的执行过程   第一步客户端连接上 mysql 数据库的连接器,连接器获取权限,维持管理连接;连接完成后如果你没有后续的指令这个连接就会处于空闲状态