mysql 索引效果是否叠加_MySQL基础实用知识集合(二)

60e405bda73ac1b45c48c60ffd25eaa0.png

上期小编给大家汇总介绍了mysql的6个基础的知识点,下面继续给大家分享一下另外7个知识点:

7、什么是死锁?怎么解决?

死锁:两个或多个事务相互占用了对方的锁,就会一直处于等待的状态。

常见的解决死锁的方法:
(1)、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
(2)、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
(3)、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
如果业务处理不好可以用分布式事务锁或者使用乐观锁

8、多版本并发控制

MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于并发性能的考虑,他们一般都同时实现了多版本并发控制(MVCC),不仅MySQL,包括Oracale、PostgreSQL等其他数据库都各自实现了MVCC,但基于实现的机制不尽相同,因为MVCC没有一个统一的标准。InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,一个是创建时间,一个是系统版本号。每开始一个新的事物,系统版本号会自动递增。

9、char和varchar的区别?

varchar是变长,char是定长
varchar占用空间更多,会多出一个字节来储存字符长度,超过255个字符使用两个字节
char无碎片,varchar经常更新会造成碎片

10、MySQL性能优化

表结构优化:数据类型的选择通常更小的最好,尽量避免NULL,表字段不宜太多,有时候反范式设计会带来性能的提升。
经常查询的列建立索引
索引列的基数越大,数据区分度越高,索引的效果越好。
对于字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间。
根据情况创建联合索引,联合索引可以提高查询效率。
避免创建过多的索引,索引会额外占用磁盘空间,降低写操作效率。
访问数据太多导致查询性能下降
确定应用程序是否在检索大量超过需要的数据,可能是太多行或列
确认MySQL服务器是否在分析大量不必要的数据行
避免犯如下SQL语句错误
查询不需要的数据。解决办法:使用limit解决
多表关联返回全部列。解决办法:指定列名
总是返回全部列。解决办法:避免使用SELECT *
重复查询相同的数据。解决办法:可以缓存数据,下次直接读取缓存
是否在扫描额外的记录。解决办法:
使用explain进行分析,如果发现查询需要扫描大量的数据,但只返回少数的行,可以通过如下技巧去优化:
使用索引覆盖扫描,把所有的列都放到索引中,这样存储引擎不需要回表获取对应行就可以返回结果。
改变数据库和表的结构,修改数据表范式
重写SQL语句,让优化器可以以更优的方式执行查询。
确定ON或者USING子句中是否有索引。
确保GROUP BY和ORDER BY只有一个表中的列,这样MySQL才有可能使用索引。
LIMIT偏移量大的时候,查询效率较低
可以记录上次查询的最大ID,下次查询时直接根据该ID来查询

11、IN和exists的使用?

exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当exists里的条件语句能够返回纪录行时
(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的到这条纪录,反之如果exists里的条 件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 false
in查询相当于多个or条件的叠加,这个比较好理解,比如下面的查询

select * from A where cc in (select cc from B),用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=http://A.cc) ,用到了B表上cc列的索引。

12、什么是交叉链接、内链接、外链接?

内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的连接表就是数据库在做查询形成的中间表)

外连接(OUTER JOIN):外连接分为左连接或左外连接、右连接或者右外连接、全连接或全外连接。我们简单的就叫:左连接,右连接和全连接

左外连接:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值
select t.teacher_name, s.student_name from teacher t, student s where t.id= s.teacher_id(+);
右外连接:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值
select t.teacher_name, s.student_name from teacher t, student s where t.id(+) = s.teacher_id;
全外连接:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值

交叉连接(CROSS JOIN):也称笛卡儿积。
概念:不带WHERE条件句,它将会返回被连接的两个表的笛卡儿积,返回结果的行数等于两个表行数的乘积

13、SQL语句关键字的执行顺序

FROM:对FROM子句中的左表和又表执行笛卡尔积,产生虚拟表VT1。
ON:对虚拟表T1应用ON筛选,只有那些符合条件的行才被插入虚拟表VT2。
JOIN:如果指定了OUTER JOIN ,那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3,。如果FROM子句包含两个以上表,则对上一个连接生成的VT3和下一个表重复执行步骤1-步骤3,直到处理完表为止。
WHERE:对虚拟表VT3应用WHERE条件筛选,只有符合条件的行才被插入到虚拟表VT4中。
GROUP BY:根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生虚拟表VT5。
CUBE|ROLLUP:对虚拟表VT5进行CUBE或ROLLUP操作,产生虚拟表VT6。
HAVING:对虚拟表VT6应用HAVING过滤器,只有符合条件的记录才被插入虚拟表VT7。
SELECT:第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中。
DISTINCT:去除重复的数据,产生虚拟表VT9。
ORDER BY:将虚拟表VT9中的记录按照字段进行排序操作产生虚拟表VT10.
LIMIT:取出指定行的记录,产生虚拟表VT11,并返回给查询用户。

睿江云官网链接:www.eflycloud.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用数据库端口号总结

关系型数据库: 1.Oracle数据库默认端口号为,1521; 2.MySQL数据库默认端口号为,3306; 3.SQLServer数据库默认端口号为,1433; 4.postgreSQL数据库默认端口号为,5432; NOSQL数据库: …

【附源码】为了帮助程序员谈恋爱,我做了这个APP

前段时间,21岁的我第一次开启了名为『恋爱』的副本,开始打名叫『女朋友』的BOSS,深感过程艰难,整个过程仿佛0级的菜鸡进入了布满世界迷雾的地图,只能小心翼翼才能平安通过。然而在打怪升级的过程中,偶然看见…

IP协议

IP协议只负责传送IP数据包,无法监视和控制网络中出现的一些问题,这些工作由Internet的控制协议来完成IP是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。它的特点如下:不可靠(u n r e…

职场故事和感悟

1. 猎头乌龙事件 05年11月的时候,我做了一个招聘主管的职位,一位朋友T推荐了她的好友L。从条件上看人很合适,聪明肯干,就是资力浅些,如果工作努力应该提高很快。我与其它两个候选人一起推荐给了客户。L与其它两人一…

zbb20180415 cs 1.6 half-life launcher已停止工作

控制面板->系统->高级系统设置->高级->性能 设置->数据保护->为除下列选定程序之外的所有程序和服务启用->添加-> 找到你的CS客户端 选择就好了-》应用 -》确定转载于:https://www.cnblogs.com/super-admin/p/8849581.html

python形参中的:*args和**kwargs区别

详细参考文章: https://blog.csdn.net/u014513323/article/details/89450573 感谢楼主分享

gitlab修改用户密码_CRM用户模块(用户密码修改)

四 密码修改1 需求分析修改当前登陆用户的登陆密码2 页面原型3 流程图 4 编写ControllerResponseBodyRequestMapping("updatePwd")public MessageModel updatePwd(HttpServletRequest request, String oldPassword, String newPassword, String confirmPassword){Mes…

ICMP协议简介

ICMP是Internet Control Message Protocol,因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据&…

vue之vuex

vuex负责vue的数据管理和共享,适用于大型项目 安装vuex npm install vuex --save; 运用vuex 主要有五大金刚: export default new Vuex.Store({//$store为了让外部可以引用state,//数据存储mutations,//行为动作actions,//异步改变state状态,也就是提交m…

项目管理中的特殊———例外管理

概念 例外管理由管理学引入领导学,也就是指领导人应将主要精力和时间用来处理首次出现的、模糊随机、十分重要需要立即处理的非程序化问题。而对于决策对象反复出现的,决策者已有固定的或例行的程序来处理的问题,即常例,由于在职业…

mysql 5.6.23 源码包安装报错_CentOS6.5_64bit下编译安装MySQL-5.6.23

标签:************************************************************CentOS6.5_64bit下编译安装MySQL-5.6.23**************************************************************一、关闭防火墙chkconfig iptables offservice iptables stop二、下载mysql源码包&…

third day- 01--文件操作

1 1、请分别介绍文件操作中不同的打开方式之间的区别:2 3 模式 含义4 r 文本只读模式5 rb 二进制模式  #这种方法,是用来传输或存储,不给人看的。6 r r 是读写模式,只要沾上r,文件必须存在7 rb …

什么是TTL

TTL是指生存时间,简单来说,它表示了数据包在网络中的时间,经过一个路由器后TTL就减一,这样TTL最终会减为0,当TTL为0时,则将数据包丢弃,这样也就是因为两个路由器之间可能形成环,如果…

python中itsdangerous模块

使用itsdangerous生成临时身份令牌 准备工作: 安装pip install itsdangerous import itsdangeroussaltsdaf#加盐,指定一个盐值,别让别人知道哦,否则就可以解密出来了 titsdangerous.TimedJSONWebSignatureSerializer(salt,expire…

微信小程序中form 表单提交和取值实例详解

2019独角兽企业重金招聘Python工程师标准>>> 我们知道&#xff0c;如果我们直接给 input 添加 bindinput&#xff0c;比如&#xff1a;<input bindinput"onUsernameInput" />&#xff0c;那么可以在 onUsernameInput 中直接使用 e.detail.value&…

matlab如何用代码导入文件_20+行Matlab代码实现文件扫描

最近刚好看到一篇回答&#xff0c;用阈值二值化处理图片水印&#xff0c;受到启发写此代码。阈值二值化适合处理只有黑白两色的图片&#xff0c;考虑到文件盖章&#xff0c;这里作者使用像素颜色替换及灰度值处理图片&#xff0c;进一步提高处理精度和能力。我们需要&#xff1…

聊聊Code Review

转载&#xff1a;https://richardcao.me/2016/09/30/Talk-About-Codereview/ 最近思考一个问题&#xff0c;如何进行高效的codereview&#xff0c;有没有好的工具可以使用&#xff0c;于是花了两三天时间在Google里淘了一番&#xff0c;这里留下记录。 Phabricator 首屈一指的c…

项目管理十大趋势

趋势一、更多中国企业成立项目管理办公室&#xff0c;项目管理办公室也发挥更大的作用 在国内&#xff0c;仍有很多企业每年有成百上千的项目实施&#xff0c;而公司却没有成立项目管理办公室&#xff0c;或者已经有了PMO&#xff0c;但是PMO仍在履行一些较为基础的职能。 没…

启动django服务器报错raise errorclass(errno, errval) django.db.utils.InternalError

问题描述&#xff1a; 启动django服务器python manage.py runserver报错: raise errorclass(errno, errval) django.db.utils.InternalError: (1366, “Incorrect string value: ‘\xE7\x94\xA8\xE6\x88\xB7’ for column ‘name’ at row 1”) 原因&#xff1a;与mysql数据库…

java单例模式之线程安全问题

单例的目的是为了保证运行时Singleton类只有唯一的一个实例&#xff0c;用于一些较大开销的操作。 饿汉式&#xff08;没有线程安全问题&#xff09;: ‘ 由于使用static关键字进行了修饰&#xff0c;只能获取到一个对象&#xff0c;从而达到了单例&#xff0c;并且在Singleton…