
mysql
文章平均质量分 69
一个路过的小码农~
这个作者很懒,什么都没留下…
展开
-
为什么重复值高的字段不能建索引(+聚集索引和非聚集索引)
一、原因:-非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引。-如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢原因就是上面的。数据库中聚集索引只有一个,默认主键。其他用户创建的索引都是非聚集索引。非聚集索引存储了对主键的引用,即通过索引确定叶子节点之后,还需要再次根据主键去查询数据。(所以会查询两次)如果非聚集索引重复率高(即一个同样的值有多个主键),那么首先你会从索引中取一半主键值,然后根据主键值再...原创 2022-02-24 22:13:00 · 3410 阅读 · 1 评论 -
Linux安装MySQL5.7
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads解压tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 再移动并重命名一下mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql创建mysql用户组和用户并修改权限 groupadd mysql useradd ...原创 2020-11-13 19:51:52 · 166 阅读 · 0 评论 -
mysql踩坑记录之limit和sum函数混合使用问题
前言今天同事在同步完订单数据后,由于订单总金额和数据源的总金额存在差异,选择使用LIMIT和SUM()函数计算当前分页的总金额来和对方比较特定订单的总金额,却发现计算出来的金额并不是分页的订单总金额,而是所有订单的总金额。数据库版本为mysql 5.7,下面会用一个示例复盘遇到的问题。问题复盘本次复盘会用一个很简单的订单表作为示例。数据准备订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID)CREATE TABLE `order` (原创 2020-10-12 19:57:55 · 729 阅读 · 0 评论 -
mysql 中select for update 锁表的范围备注
mysql的锁表范围测试1.主键明确时,行级锁: 解释:指定主键并且数据存在时,仅锁定指定的行,其它行可以进行操作 实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是更新id不为1的项目时可以直接更新③,释放锁后④,可以任意更新⑤2.主键不明确时,表级锁: 解释:指定主键不明确或者数据不存在时,整表锁定 指定主键不明确包括使...原创 2020-04-01 23:10:49 · 460 阅读 · 0 评论 -
mysql 的读写锁与并发控制
1.无论何时只要有多个查询在同一时刻修改数据,都会产生并发控制的问题2.讨论mysql在两个层面,服务器层和存储引擎层,如何并发控制读写3.举了个mbox邮箱文件的例子,说如果有多个进程同时对mbox文件写东西,那么在文件的末尾会,交叉混乱的添加,比如进程1写了几行,进程2也写了几行,互相交叉,数据就是错误的了.设计良好的mbox需要加锁,比如进程1锁住了文件,进程2必须等待进程1结束,锁...原创 2020-03-24 18:51:36 · 160 阅读 · 0 评论 -
mysql索引的注意事项
1,复合索引遵循最左前缀原则2,like查询,%不能在前,否则索引无效,可以使用全文检索引擎,spinx,es3,column is null 可以使用索引4,如果mysql估计使用索引比全表扫描慢,会放弃使用索引5,如果or前的条件中的列有索引,后面的没有,索引都不会被用到6,列类型是字符串类型,查询时一定要给值加引号,否则索引失效...原创 2020-03-22 23:32:01 · 181 阅读 · 0 评论 -
MySQL Left join 或 right join 时返回 null字段 给默认值
有时候 在数据库左右连接查询时需要修改返回列为null的字段值,比如 :返回 1或0等这时候就会用到 COALESE(field,0) 函数,这个函数会在fiele 为null时 将值修改为后面知道的 0.当然还有 ifnull 和 is_null 函数有类似功能。selecta* , coalesce(b.count,0) as bcount from user as ale...原创 2020-03-13 19:48:38 · 2780 阅读 · 0 评论 -
小米soar mysql优化规则
启发式规则建议[toc]建议使用 AS 关键字显示声明一个别名Item:ALI.001 Severity:L0 Content:在列或表别名(如"tbl AS alias")中, 明确使用 AS 关键字比隐含别名(如"tbl alias")更易懂。 Case:select name from tbl t1 where id < 1000不建议给列通配符'*'设置别名...转载 2019-05-14 11:38:16 · 1186 阅读 · 0 评论 -
Mysql千万级大数据量查询优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t ...转载 2019-04-28 17:56:23 · 801 阅读 · 0 评论 -
mysql注意的小细节
1,like 不能和 datetime等时间格式一起用。原创 2019-03-04 22:03:26 · 157 阅读 · 0 评论 -
MySQL中DATETIME、DATE和TIMESTAMP类型的区别
一、DATETIME显示格式:YYYY-MM-DD HH:MM:SS时间范围:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']二、DATE显示格式:YYYY-MM-DD时间范围:['1000-01-01'到'9999-12-31']三、TIMESTAMP显示格式:YYYY-MM-DD HH:MM:SS时间范围:[ '1970-0...转载 2018-11-26 18:27:20 · 116 阅读 · 0 评论 -
关于mysql最左前缀原则
背景知识:mysql中可以使用explain关键字来查看sql语句的执行计划。最左前缀原则主要使用在联合索引中数据库版本Mysql5.5.531.首先准备如下测试数据表CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT...原创 2018-11-18 00:01:49 · 133 阅读 · 0 评论 -
Mysql联合索引最左匹配原则
前言之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。最左前缀匹配原则在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对列col1、列col2和列col3建一个联合索引? 1 KEY...原创 2018-11-17 23:56:11 · 755 阅读 · 1 评论