mysql
wzhzzzz
这个作者很懒,什么都没留下…
展开
-
mysql如何进行组内排序?利用复合索引高效得到结果!
常见的组内排序方式有,1:子查询法:根据子查询得到组内的最小或最大值,再通过id查询数据。2:利用group_concat(name order by name desc) 得到列值顺序或倒序的拼接字符串,再使用substring函数切合得到字符串第一个元素的值。子查询法的缺点是,需要进行子查询,所以需要用到临时表。速度比较慢而本文介绍到的使用复合索引去查询得到组内排序结果,只需要一条普通的s...原创 2019-12-20 23:20:53 · 556 阅读 · 0 评论 -
探究mysql order by的值相同时,返回结果不一致的原因
1.表结构由于是公司的数据库,只把需要的列展示出来,其他敏感数据就不展示了。只需要关注这两列,主键id,car_rank_id(有索引)2.过程select * from × order by car_rank_id当car_rank_id相同时,id完全无规律select id,car_rank_id from × order by car_rank_id当car_ra...原创 2019-12-04 17:33:57 · 2958 阅读 · 0 评论 -
mysql是怎么解决幻读的(mvcc,间隙锁)
mysql的默认隔离级别是RR(可重复读),网上随便一查都知道RR会导致幻读(同一个事务里面多次查询的结果不一致),可是我自己测试过后发现在RR下并不存在幻读的问题,哪mysql是怎么解决幻读的呢?有两种手段。1,mvcc(多版本控制),2,范围锁1. mvcc每次开启事务后都会递增创建一个版本号(version),之后的增删查改都是基于这个版本号进行操作的。SELECT (version)...原创 2019-10-14 18:47:35 · 3974 阅读 · 1 评论 -
如何写一个高效的索引,优化mysql查询(分页,回表,排序)
1. 需要优化的地方where用索引(避免全表扫描)select用索引(避免回表)排序走索引 (避免查询出来后还要进行排序)按照[《数据库索引设计与优化》][1]的说法满足1,2和3的索引就是三星索引了2. 例子测试表有3308670行数据,数据是我网上找了个人名生成网站后把数据写进去的CREATE TABLE `eyas_account` ( `id` int(11) NO...原创 2019-08-21 11:28:16 · 1389 阅读 · 0 评论 -
如何优化mysql分页查询
接上篇:《如何写一个高效的索引,优化mysql查询(分页,回表,排序)》现在需求改了,需要进行分页并且返回所有的字段。可以按照上篇的方法写一个三星索引,但有一个严重的问题,由于需要查询全部的列,而为了避免回表只能建立一个所有列的联合索引。这就等于把整个表的数据复制了一份。CREATE TABLE `eyas_account` ( `id` int(11) NOT NULL AUTO_INC...原创 2019-08-21 14:03:30 · 335 阅读 · 0 评论