MySQL
凯凯兹
code..
展开
-
MySQL不同的 count 用法区别(InnoDB)
不同的 count 用法问:在 select count(?) from t 这样的查询语句里面,count(*)、count(主键 id)、count(字段) 和 count(1) 等不同用法的性能,有哪些差别。所以结论是:按照效率排序的话,count(字段)<count(主键 id)<count(1)≈count(),所以我建议你,尽量使用 count()。今天详细说明一下这几种用法的性能差别。需要注意的是,下面的讨论还是基于 InnoDB 引擎的。这里,首先你要弄清楚 count(原创 2020-09-13 19:53:40 · 184 阅读 · 0 评论 -
为什么表数据删了一半,表文件大小不变?
1:为啥删除了表的一半数8据,表文文件大小没变化?因为delete 命令其实只是把记录的位置,或者数据页标记为了“可复用”,但磁盘文件的大小是不会变的。也可以认为是一种逻辑删除,所以物理空间没有实际释放,只是标记为可复用,表文件的大小当然是不变的啦!2:表的数据信息存在哪里?表数据信息可能较小也可能巨大无比,她可以存储在共享表空间里,也可以单独存储在一个以.ibd为后缀的文件里,由参数innodb_file_per_table来控制,老师建议总是作为一个单独的文件来存储,这样非常容易管理,并且在不需要原创 2020-09-13 19:00:00 · 511 阅读 · 0 评论 -
让你的InnoDB更新插入操作变得更‘快’(刷脏页的控制策略)
刷脏页的控制策略告诉InnoDB 你(磁盘)有多‘快’(innodb_io_capacity)你的MySQL如果在插入时,反应很迟钝,那体验肯定非常不爽【滑稽一点都不敏感!其实可能的原因,不是它真的不行,而是你告诉它:“你不行!”接下来,我就来和你说说 InnoDB 脏页的控制策略,以及和这些策略相关的参数。首先,你要正确地告诉 InnoDB 所在主机的 IO 能力,这样 InnoDB 才能知道需要全力刷脏页的时候,可以刷多快。这就要用到 innodb_io_capacity 这个参数了,原创 2020-09-13 10:34:48 · 304 阅读 · 0 评论 -
MySQL锁模块详解(手把手实战)
锁模块1. MyISAM与InnoDB关于锁方面的区别是什么MyISAM支持表级锁,不支持行级锁InnoDB默认行级锁,也支持表级锁MyISAM表由于MyISAM无事务,所以我们想测试锁,需要执行大数据量语句。打开多个查询窗口(每个窗口代表一个SESSION,后用S1、S2代表两个窗口)读锁(共享锁)用S1,查询一个MyISAM表前200W条数据,同时S2更新第200001条,S2进入阻塞,等待S1查询执行完,S2才能执行用S1,查询一个MyISAM表前200W条数据,同时S2查询第原创 2020-05-23 12:17:10 · 9314 阅读 · 0 评论 -
RC、RR级别下的InnoDB的非阻塞读如何实现
RC、RR级别下的InnoDB的非阻塞读如何实现数据库有着三个隐藏的字段,通过这三个字段,通过这些字段我们实现了记录追踪,历史回朔数据行里的DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID字段undo日志(每操作一次数据,顺序增加一个日志)read view(快照本照了)数据行DB_TRX_ID、DB_ROLL_PTR、DB_ROW_ID字段DB_TRX_ID(最后一次操作事务ID)DB_ROLL_PTR(回滚指针)DB_ROW_ID(InnoDB表中在没有默认主键的情况原创 2020-05-23 12:15:47 · 9458 阅读 · 0 评论 -
InnoDB可重复读隔离级别下如何避免幻读
InnoDB可重复读隔离级别下如何避免幻读主要通过以下两种情况避免幻读表象:快照读(非阻塞读)伪MVCC表象避免幻读,是RR下查找数据,第一次读取创建快照,后面读取都是读取本次快照,不论别的事务是否提交相关更改,我们都不知道,掩耳盗铃内在:next-key锁(行锁+gap锁)上了锁,你别的操作不会修改我锁定的区间了,我就不会幻读首先我们理解下面两个概念,当前读和快照读当前读:select xxx lock in share mode,select xxx for update、updat原创 2020-05-23 12:15:14 · 9440 阅读 · 0 评论 -
MySQL事务隔离级别以及各级别下的并发访问问题
事务隔离级别以及各级别下的并发访问问题事务隔离级别read uncommitted、read committed事务并发访问引起的问题更新丢失这种情况,就会发现,出现一个更新丢失的问题。脏读我们设计一个场景,理解一下脏读1.开启两个数据库sessions窗口,分别设置数据库事务隔离级别为read uncommitted2. S1窗口,开启事务,更新id为1的余额1000-100,不提交事务3. S2窗口,开启事务,查询id为1的余额(900),已经产生脏读4. S1窗口,回滚事务,原创 2020-05-23 12:14:18 · 9103 阅读 · 2 评论 -
对比MyISAM与InnoDB关于锁方面的区别
1. MyISAM与InnoDB关于锁方面的区别是什么MyISAM支持表级锁,不支持行级锁InnoDB默认行级锁,也支持表级锁MyISAM表由于MyISAM无事务,所以我们想测试锁,需要执行大数据量语句。打开多个查询窗口(每个窗口代表一个SESSION,后用S1、S2代表两个窗口)读锁(共享锁)用S1,查询一个MyISAM表前200W条数据,同时S2更新第200001条,S2进入阻塞,等待S1查询执行完,S2才能执行用S1,查询一个MyISAM表前200W条数据,同时S2查询第2000原创 2020-05-20 22:25:23 · 14589 阅读 · 0 评论 -
MySQL索引详解(手把手优化查询)
1索引模块1.1为什么使用索引?全表扫描会查询整个表所有的数据块、数据页,速度太慢,使用索引能避免全表扫描,加快速度1.2什么信息建立索引?主键、唯一键等让数据产生区分性的都可以建立索引1.3索引的数据结构B+Tree、Hash结构(Mysql不显式支持)、BitMap(Mysql不支持)B-TreeMySQL建立索引,优化查询速度,手把手建立索引索引建立,查询优化原创 2020-05-19 23:50:34 · 14212 阅读 · 1 评论 -
MySQL创建、调用存储过程
一、创建存储过程今天我们搞一搞MySQL的存储过程,过程中踩了一些小坑,算是做个总结归纳~首先,我们了解一下存储过程的创建语句:CREATE PROCEDURE `index_statistic`(IN `flag` varchar(10),OUT `result` int,INOUT `num` int)BEGIN IF flag is not null THEN #查询语...原创 2019-03-18 15:47:13 · 14576 阅读 · 0 评论 -
MySQL如何查询刚插入的数据
1、MYSQL使用SQL函数LAST_INSERT_ID()获得刚刚插入的AUTO_INCREACE字段的ID值。必须前一SQL为一INSERT语句,如果是其他语句,返回的ID值为零。2、使用命令窗口时,注意不能关闭窗口后再用SELECT LAST_INSERT_ID()函数,这样获得的ID值同样为零。必须是刚INSERT完,而无新的其他语句,也未关闭该对象,立即使用该函数才可正确获得。此函...原创 2018-08-16 15:56:42 · 21687 阅读 · 0 评论 -
遇到only_full_group_by抛出异常
SELECT list is not in GROUP BY clause and contains nonaggregated column 'dict.label' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_gr...原创 2018-06-08 14:34:38 · 13965 阅读 · 0 评论 -
MySQL5.7时间格式问题
MySQL升级5.7后,出现异常Invalid default value for 'create_time'mysql 5.7之后版本datetime默认值设置'0000-00-00'解决方案:一、修改MySQL配置打开MySQL安装位置,找到my.ini配置文件,添加或修改如下配置:在[mysqld]中添加sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TA...原创 2018-06-01 09:53:49 · 15956 阅读 · 0 评论 -
MySQL远程连接无法创建视图
今天部署服务器,发现远程连接服务器数据库的用户权限不够,不能创建数据库视图,分享下解决办法MySQL(V.5.7.20)Mysql为了安全性,在默认情况下用户只允许在本地登录,开发过程中免不了要调试服务器上的数据库,因此为了使其可以远程需要进行如下操作:允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:在本机先使用root用户登录mysql: mysql -u roo...原创 2018-06-01 09:45:09 · 15024 阅读 · 0 评论