mysql和oracle都是关系型数据库
(1)mysql是轻量级数据库,开源免费,没有服务恢复数据;oracle是重量级数据库,不开源收费。
(2) MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交
(3)
oracle安全功能更多一点,mysql用三个参数来验证用户,用户名、密码、位置;Oracle使用了许多安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等。
建立索引一般在SQL 查询语句的条件(一般作为 WHERE 子句的条件)
索引:高效获取数据的数据结构。提高查询速度,提高排序速度。但是会降低更新表的速度,(insert,delete,update,因为不仅要更新数据,还要更新索引文件)
不同的存储引擎有着不同的索引结构。一般指innodb引擎的B+树索引结构。
二叉树缺点:顺序插入时,会形成一个链表,查询效率大大们降低。数据量大时,层级较深,检索速度慢
红黑树缺点:数据量大时,层级较深,检索速度慢
B Tree:度数为5(5阶),一个节点有4个key,5个指针。如果该节点已经有4个key,再添加,树就会发生裂变(中间元素向上裂变)。
树的度数:一个节点的子节点数
指针=key+1
BTree动态变化网站:https://www.cs.usfca.edu/~galles/visualization/BTree.html
B+Tree:
非叶子节点:索引作用
叶子节点:存放所有数据(单向链表)
Mysql中的索引结构:带有顺序指针的B+树(在B+树的基础上,增加一个指向相邻叶子节点的链表指针)
插入数据时,数据量超多的话,不要用insert,用load。
mysql优化:
一、数据库优化:存储引擎
二、sql优化:
(1)查询sql要尽量避免全表扫描,在where和order by 后面的字段上建立索引。
以下方式可以避免索引失效:
(1)避免在where子句中对字段进行null判断,可把该字段变为0
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN
(3)尽量避免在索引列上做运算,这样导致索引失效
例如:select * from admin where year(admin_time)>2014
优化为: select * from admin where admin_time> '2014-01-01′
(4)避免用or,用union all代替
例如:select * from books where bookid =1 or bookid =2;
优化为:select * from books b where bookid =1 union select * from books where bookid =2;
注:union 和union all的区别:
union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
(5)避免使用!=或者<>符合