MySql常用知识
来源:互联网 发布:淘宝网资金保护中 编辑:程序博客网 时间:2024/05/21 22:49
MySql索引
想学习好数据库,对数据库的查询想掌握特别深的话,这是必须知道,也是必须学的。- hash索引:
它的底层使用的是hash表(原理这里就不说了),主有Memory存储引擎显示支持Hash索引,它也是Memory表的默认索引类型,它页可以使用B+树索引。(过多就不详细说了,我也不太了解) - B+树索引
B+树大家都知道吧(不知道的话,可以在网上搜搜,懂原理就行,实现起来困难非常大,小编以前尝试过,最终还是放弃了)。Mysql中用的最多的两个存储引擎InnoDB和MyISAM,它们两个底层使用最频繁的索引就是B+树。
它们两个(指InnoDB和MyISAM,以下出现它们两个都是指InnoDB和MyISAM)用B+树的特性,所有数据都在叶子节点上,增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。主要是为了提高区间查询的效率。
- hash索引:
MyISAM存储引擎和InnoDB存储引擎的区别
- MyISAM不支持事务,InnoBD支持,它都会把每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,可以使用多条SQL语句放在begin和commit之间,组成一个事务提交
- MyISAM不支持表锁设计,InnoDB支持,主要是表共享读锁和表独占写锁(这个区别可以参考以后我写的博客)
- MyISAM支持全文索引、并保存这个表的行数,而InnoDB不支持,前者查询效率要高一些。
- InnoDB支持外键,而MyISAM不支。对有外键的InnoDB表转为MyISAM会失败
- InnoDB是聚集索引,数据文件和索引绑在一起,必须的时候是要有主键,通过主键索引效率会很高。但是辅助索引需要两次查询,先查询到主键,然后通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
- InnoDB不保存表的具体行数,执行查询行数时需要对表进行扫描,而MyISAM用一个变量保存了整个表的行数,执行查询行数只需独处变量即可,速度非常快。
常见的索引
- 主键索引(PRIMARY_KEY):它是一种特殊的唯一索引,不允许有空值,也是我们通常用的主键。
- 唯一索引(UNIQUE):它与“普通索引”类似,不同的就是索引列的值必须唯一,但允许有空值。
- 普通索引(INDEX):最基本的索引,没有任何限制。
- 全文索引(FULLTEXT):仅用于MyISAM表,针对较大的数据,生成全文索引很耗时很耗空间。
- 组合索引INDEX:为了更多提高MySql效率可建立组合索引,遵循“最左前缀”原则(指的是查询的时候必须包括建立索引时最左端元素)。
选择索引的数据类型
- 越小的数据类型通常会更好,它们的数据类型通常在磁盘、内存和CPU缓存中都需要更小的空间,处理起来快一些。
- 简单的数据类型更好:整型数据比起字符,处理开销更小,字符串的比较更复杂。整型通常是作为标识符最好的选择,它处理起来更快,而且可以设置为自增(AUTO_INCREMENT)。尽量避免使用字符串作为标识符,它消耗更多的空间,处理起来也比较慢。
- 避免NULL,应指定列为NOT NULL。
几种连接查询
- 左连接:left join 或 left outer join,查询的时候把左表的元素全部查询出来,右边多了删,少了补null
- 右连接:right join 或 right outer join,与上面相反。
- 内连接:join 或 inner join , 查询的时候以左右表为参照,左边多了删左边,右边多了删右边。
- 交叉连接:cross join,使用的是笛卡尔集,所有组合都会出现。
三大范式
- 第一范式之无重复列:这是最基本的要求,就是说所有的列中不能重复。
- 第二范式之属性完全依赖于主键,这里说到了外键,每个属性必须要完全或者简介依赖于主键,比如家庭:你和你媳妇,你的爸爸主要依赖于你,单你的媳妇爸爸直接依赖于你媳妇,这就不满足,必须设计成你和你媳妇两张表。
- 第三范式之属性完全依赖于主键,比如你和你女儿,你女儿属于你,你女儿的礼物是直接属于你的女儿,所以要分开建两张表。
必须满足这些,第二范式必须先满足第一范式,范式越高,外加要求就越多,越往后的范式必须之前它前面所有的范式。
数据库事务正确执行的四个基本要点
- 原子性:整个事务中的所有操作,要么是全部完成,要么是全部不完成。(这个在Java中也挺重要的)
- 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
- 隔离性:隔离状态执行事务,使它们好像是系统给定时间内执行的唯一操作。通俗的将就是多个事务之间不互相干扰(类似于多线程)
- 持久性:在事务完成以后,该事务所对数据库的更改将持久保存在数据库中,不会被回滚。
阅读全文
1 0
- MySQL常用知识
- mysql 常用知识大全
- Mysql常用知识
- 【转】MYSQL常用知识
- mysql 常用知识
- mysql常用知识
- MySQL常用知识总结
- mysql常用知识
- MySql常用知识
- MYSQL常用操作 知识梳理
- mysql知识积累(三)常用
- MySQL 常用知识积累(一)
- mysql学习与整理常用知识
- 常用知识
- 常用知识
- 常用知识
- 常用知识
- 常用知识
- Java多线程
- 添加数据到表格
- It行业风投
- sorted()排序的key
- 深入理解JVM—性能监控工具
- MySql常用知识
- 每天一个linux命令(49):at命令
- 每天一个linux命令(50):crontab命令
- 关于单个字符(%c)用scanf输入的错误(多了空行出来)
- Fragment,侧滑菜单,PullToRefresh上下拉加载
- Java IO-BufferedReader
- 购物车
- 10_张孝祥_多线程_Callable与Future的应用
- NYOJ 21 三个水杯(BFS)