序言
按照软件重构思想的理念,若多个类中出现相同的代码,则应该考虑定义一个父类,将这些相同的代码提取到父类当中。
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 (*)。
SQL(Structured Query Language,结构化查询语言)是 MySQL 服务器能听懂的语言,共分为四大类:DDL、DQL、DML、DCL:
Data Definition Language)——CREATE、ALTER、DROP 等语句Data Query Language)——SELECT、FROM、WHERE 及其组成语句Data Manipulation Language )——UPDATE、INSERT、DELETE 语句Data Control Language )——COMMIT、ROLLBACK、SET TRANSACTION