同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
范式化设计优缺点
优点:可以尽量得减少数据冗余,使得更新快,体积小。
缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化。
反范式化
优点:可以减少表得关联,可以更好得进行索引优化。
缺点:数据冗余以及数据异常,数据得修改需要更多的成本。
优点:
1、存储过程是一个预编译的代码块,执行效率比较高。
2、存储过程在服务器端运行,减少客户端的压力。
3、允许模块化程序设计,只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用。
4、一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率。
5、可以一定程度上确保数据安全。
缺点:
1、调试麻烦。
2、可移植性不灵活。
3、重新编译问题。
将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值的特殊性就在于参与的运算大多取值为null。
索引列存储Null值,null值实际上是不能参与进建索引的过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点上。
mysql_fetch_array()–将结果行作为关联数组或来自数据库的常规数组返回。
mysql_fetch_object()–从数据库返回结果行作为对象。
1、设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
3、mysql库主从读写分离。
4、找规律分表,减少单表中的数据量提高查询速度。
5、添加缓存机制,比如memcached,apc等。
6、不经常改动的页面,生成静态页面。
7、书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE。
MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control)
注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control
MVCC最大的优势: 读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,现阶段几乎所有的RDBMS,都支持了MVCC。
1、LBCC:Lock-Based Concurrency Control,基于锁的并发控制 2、MVCC:Multi-Version Concurrency Control
基于多版本的并发控制协议。纯粹基于锁的并发机制并发量低,MVCC是在基于锁的并发控制上的改进,主要是在读操作上提高了并发量。
使用like模糊查询全部字段的的情况
1)当两边使用%时,结果是全表扫描,索引失效。
2)当左边使用%时,结果是全表扫描,索引失效。
3)当右边使用%时,结果是range,索引生效。
上述三种情况当使用like模糊查询所有字段,不包含在索引列中的字段时,只有%放在右边索引才会生效。
注意尽量避免SELECT *查询,而是一一罗列出所需要查询的字段,因为可能搞不好SELECT *查询多出一个字段,就导致全表扫描。
覆盖索引
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。
只扫描索引而无需回表的优点:
1)索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。
2)因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。
3)一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用。
4)innodb的聚簇索引,覆盖索引对innodb表特别有用。(innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询)
覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql只能用B-tree索引做覆盖索引
行级锁的优点
1)在许多线程请求访问不同的行时减少冲突锁。
2)事务回滚时减少改变数据。
3)可以长时间对单一的行数据加锁。
行级锁的缺点
1)比页级或表级锁定占用更多的内存。
2)当大量表中使用行级锁时,比页级锁或表级锁占用更多的内存。
3)如果需要频繁对大部分数据使用GROUP BY分组操作或者需要频繁扫描整个表时,明显比其它锁慢很多。
4)使用高级别锁时更方便的支持各种不同的类型应用程序,因为这种锁开销比行级锁要小很多。
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
可以用一个命令对象来调用存储过程。
1、快照读 (snapshot read):读取的是记录的可见版本 (有可能是历史版本),不用加锁(共享读锁s锁也不加,所以不会阻塞其他事务的写)。
2、当前读 (current read):读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。