前言
在理想状态下,用户输入数据的格式永远都是正确的,选择打开的文件也一定存在,并且永远不会有 Bug。
但现实却往往很残酷,程序总会碰到不良的数据或在执行中出现 Bug 。。。
泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada、Delphi、Eiffel、Java、C#、F#、Swift) 和 Visual Basic .NET 称之为泛型(generics);ML、Scala 和 Haskell 称之为参数多态(parametric polymorphism);C++ 和 D称之为模板)。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。
SQL 查询需要花费一定时间,有时会长得让人心烦。
为了尽可能缩短查询时间,提高效率,带来良好的用户体验,我们可以:
用来加快查询的技术有很多,其中最重要的是索引。通常,能够造成查询速度最大差异的是索引的正确使用。很多时候,当查询速度很慢时,添加上索引后就能迅速解决问题。但情况也不总是这样,因为优化并不总是一件简单的事情。然而,在许多情况下,假如你不使用索引,那么试图通过其他途径来提高性能则纯粹是浪费时间。你应该首先使用索引来最大程度地改进性能,然后再看是否还有其他技术可以采用。
对索引的研究请参考 MySQL 数据库优化之索引。
利用较好的硬件可使服务器运行得更快。
通过硬件优化,最重要的原则与调整服务器参数时的原则一样——将尽可能多的信息快速储存起来,并且尽可能久地保存它们。
对硬件配置的以下几个方面进行修改来改进服务器性能:
简而言之,加内存!换磁盘!升 CPU!搞机器!即,打钱!!!
不同的数据类型也会影响查询的性能,因此:
NOT NULLENUM数据列PROCEDURE ANALYSE()语句分析数据表,其可以提供声明建议在 MySQL ,我们可以通过命令来查看相关 SQL 的执行情况以决定如何优化 SQL 的执行效率,具体请参考 MySQL 数据库优化之分析执行计划
一个常见又非常头疼的问题就是limit2000000,10,此时需要MySQL排序前2000010记录,仅仅返回2000000-2000010的记录,其他记录丢弃,查询排序的代价非常大。
LIMIT 走主键索引,过滤出小数据量,在多表联查
count的几种用法如下:
count(主键):InnoDB 引擎会遍历整张表,把每一行的主键id 值都取出来,返回给服务层。服务层拿到主键后,直接按行进行累加(主键不可能为 NULL)count(字段):NOT NULL约束:InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,直接按行进行累加NOT NULL约束:InnoDB 引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为 NULL,不为 NULL,计数累加count(1):InnoDB引擎遍历整张表,但不取值。服务层对于返回的每一行,放一个数字“1”进去,直接按行进行累加count (*):InnoDB引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接按行进行累加 按照效率排序的话,count (*) ≈ count(1) > count(主键) > count(字段),所以尽量使用count (*)。