首先是linq,linq全称是语言集成查询,在学习linq的时候自己同时接触到了lambda表达式,linq分两种写法,一种是标准查询标准查询表达式,还有一种就是lambda表达式,在查询效率上两者没有太大的差别,编译器都能接受,标准查询表达式更接近普通人的思想,适用于新手,lambda表达式简洁,富有美感,我个人是比较推崇的,例如:list.where((x,i)=>list.findindex(z = >z.id == x.id) == i);这个写法就是将list里的id重复的数据进行去重,取到最新的数据,lambda能够将大量的,较为繁琐的数据简化为简练的语句,很方便,lambda表达式的好处就是将语言进行统一,编程人员不必为每种数据库都学习新的语言,并且代码量大大减少,简单易读,linq不仅仅能够进行查询,还能够进行类型装换,linq的查询结果可以使用var进行接收,自己能够使用linq进行增删改查和一些关联查询,在类型转换上没有过运用的实例,要是项目中用需要使用的情况下,我会进行学习,对于linq的基本语法,在此不进行赘述,若有需要,我会在我的博客进行更新.
说到linq就不得不说下SQL server的学习,因为在linq学习前必须有扎实的SQL 语言积累,常用的增删改查在此就不进行赘述,主要是分页查询,分页查询功能的实现可以通过VS组件来完成,也可以通过SQL语句进行编写,个人推荐使用语句,因为,在掌握了SQL的分页语句后,无论是在C#,Java上都能够迅速的实现分页功能,减少开发时间,减少对控件的依赖,增加自己对于程序的理解,真正的掌握一格技巧,我目前学会的分页语句都是用过跳过多少条数据,显示多少条数据,来进行的分页,通过掌握这种思想,可以在其他的关系型数据库和非关系型数据库上进行分页,思想大致一样,在这里将SQL的分页和linq的分页进行比较就能显示出一些差别
SQL:$@"select * from 表名 order by 字段 offset{(每页显示条数)*(页数-1)} row fetch next {每页显示条数} rows only":
linq: list.skip((每页显示条数)*(页数-1)).Take(每页显示条数);
在这两者相比较下就能直观的比较出SQL和linq的一些差别,有时我也在想linq的实现方法能不能在SQL上实现;
MongoDB,说到MongoDB就不得不先说一下nosql,nosql我的初步理解就是not only SQL;顾名思义不仅仅是数据库,21世纪出,随着web技术的飞速发展,传统的SQL server、MySQL和oracle等关系型数据库已经不能够满足需求,这时候就有人提出来非关系型数据库的概念,非关系型数据的特点就是结构松散非常灵活,nosql主要分为四种,我主要学习的就是面向文档型数据库MongoDB,MongoDB在国内被大多数的程序员戏称为"芒果",言归正传,MongoDB数据库是一种面向文档的非关系型数据库,介于关系型数据库和非关系型数据库之间的一种,被称为最接近关系型数据库的非关系型数据库,具有结构非常松散和非常灵活的特点,常适用于存储分布式文件,以便大数据处理,MongoDB最大的优势在于 免费+开源+官方技术支持, MongoDB的社区非常完善,这位MongoDB吸引到了大量的使用者.
MongoDB由"数据库"组成,数据库由集合组成,集合由文件组成.域组成了文档,文档可以被索引从而提高了查找和排查的性能,MongoDB读取数据库是通过游标进行的(,参照SQL的话,表换成集合,行换成文档,列换成域),在MongoDB我进一步接触了"管道"这种思想,管道的思想就是将这次计算的结果当成下个运算的参数,管道可以重复使用,管道的用法常见于聚合运算符,在数据量较大时推荐使用MongoDB;
下面是MongoDB的运行方式:
两个file,两个view:data file和journal file; shared view 和 private file,两个file是对磁盘而言的,两个view是对内存而言的,MongoDB数据库的读写操作都是在private file上的;
data →shared→ private 最初
mongo → private→journal→shared→data
shared→ private
最后一个收获就是MySQL的学习,MySQL是一种关系型数据库,和SQL server是一样的是一种常见的关系型数据库;属于oracle旗下的产品,在web 应用方面,MySQL是最好的RDBMS应用软件,MySQL的特点就是体积小,速度快成本低,代码开源,支持TCP/IP,ODBC和JDBC,使用的语言形式是SQL语言形式.
在MySQL中我自己主要的是学习了索引和存储过程,索引的优点就是可以极大地增加查询速度,并且可以在任意字段上添加索引,但是需要注意的是创建和维护索引都需要时间,并且随着数据量的增加而提升,并且需要占据大量的时间,索引的类别我分为了五种,分别是单列索引,全文索引,组合索引,空间索引,和其他;
MySQL的索引类型有很多,但是底层存储的数据结构都是B_TREE,B树索引有自己的限制,
如果不是按着索引最左列开始查找就无法使用索引
使用索引时,不能跳过索引中的列
not in和<>操作无法使用索引
如果索引中有某列的查询范围,则其右边的所有列都会无法使用索引
注意: 尽量避免在索引上的列上使用表达式或函数.
索引列具有选择性,索引的选择性是不重复的索引值合表的记录数的比值;
更新索引统计信息及减少索引碎片: analyze table table_name;
若值的差异性较大,并且以等值查找(=.<,>,in)为主,Hash是一个不错的选择;
还有一些其他的基本知识,例如三目运算符,虚方法,部分类的思想,语法糖RX响应式编程等等,由于知识点过小,学的不精就不一一赘述;有写的不对的地方请批评指正;