mysql

mysql知识点更新

2018-04-27  本文已影响6人  没睡醒的鱼

什么是预编译

我们通常在JDBC中使用PreparedStatement来实现预编译的功能。当客户端发送一条sql语句给服务端后,服务器总要检查sql语句是否正确,然后把sql语句编译成可执行的函数,最后才执行sql语句。其中检验语法和编译所花的时间可能比执行sql语句花的时间都要多。如果我们需要执行多次insert语句,但每次插入的值不同,mysql服务器也需要每次都去检查sql语句的语法格式以及编译,这样就大大浪费了时间。使用预编译功能,只对sql语句进行一次语法校验和编译,效率会很高。

什么是sql注入

将恶意代码插入到sql语句中并使其执行。

如何防止sql注入

索引失效的原因总结

mysql中的锁

mysql中B+树索引与Hash索引的区别

B+树是一个平衡的多叉树,B+树从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动。InnoDB引擎使用的B+树索引
Hash索引采用Hash算法,把键值转换成哈希值,不需要逐级查找,只需要一次哈希计算就可以定位到位置。MEMORY引擎使用的是Hash索引

两者的区别

那什么是最左前缀原则呢?在创建多列索引时,根据业务需求,where字句中使用最频繁的一列放在最左边,例如当创建(a,b,c)复合索引时,想要索引生效的话,只能使用a和a,b和a,b,c三种组合。

哪些情况索引会失效

B树和B+树

m阶B树:每个节点至多拥有m个子节点
B树特点:

B+树相对于B树做的改进:

B+树相对于B树的好处:

B+树的使用场景:

Mysql的内连接,左连接,右链接,外链接

联合索引的最左匹配原则

简单的来说就是从联合索引的最左边开始匹配
假设我们在一个user表中对username,password,age三个字段建立了联合索引
下面两个sql语句会使用到联合索引:

select * from user where username="xxx" and password="xxx" and age="xxx";
select * from user where username="xxx";

而下面的语句则不会使用联合索引:

select * from user where password="xxx" and age="xxx";

为什么说使用联合索引比使用多个单列索引效率高

还使用上面的例子,假设对username,password和age分别建立了索引,但是在一条语句中使用多个单列索引的话,Mysql只会选择一个选择性最高的字段作为索引,另外的索引则不会使用
使用联合索引的话则会根据三个索引唯一的确定一条记录

MVCC

MVCC:多版本并发控制;在多线程过程中保证事务的隔离,降低锁竞争的压力;每开启一个事务,会生成一个唯一的递增的版本号,被操作的数据会生成一条新的临时数据行,新版本数据在提交前对其他事务是不可见的,保证了每个事务的操作都是互不影响的;事务提交时比较版本号,比较成功则更新数据

上一篇 下一篇

猜你喜欢

热点阅读