1.优化查询缓存的查询。NOW()和RAND()等SQL函数或其他此类SQL函数将不会启用查询缓存。谨慎使用。2.EXPLAINusSELECT查询(您可以查看执行的行数)使我们能够发现潜在的性能问题。3.当只有一行数据时,使用LIMIT1MySQL数据库引擎会在找到一条数据后停止查找,而不是继续查询下一条符合条件的数据记录。4.为搜索字段创建索引。在识别度高的列上建立正确的索引,提高性能。5.join表时使用某种类型的列,对关联表的key字段进行索引,相同的类型和字符集合一致才能提高性能,否则它们的索引无法使用。6、不要用ORDERBYRAND()执行RAND()函数(它会消耗大量的CPU时间),这会成倍地降低你的数据库的性能。7、避免SELECT*从数据库中读取的数据越多,查询就越慢。8.始终为每个表设置一个ID我们应该为数据库中的每个表设置一个ID作为其主键,最好是INT类型(推荐使用UNSIGNED),并设置为自动增加AUTO_INCREMENT标志。9.你可以使用ENUM而不是VARCHARENUM类型是非常快速和紧凑的。实际上,它包含一个TINYINT,但它看起来是一个字符串。10、尽可能使用NOTNULL如果不是特殊情况,尽量不要使用NULL。对于MYSQL中的INT类型,EMPTY为0,NULL为空值。在Oracle中,NULL和EMPTY的字符串是一样的。NULL也会占用存储空间,会让我们的程序判断起来更加复杂。现实是很复杂的,还有一些情况我们需要使用NULL值。11.定长表会更快。表中没有以下类型的字段:VARCHAR、TEXT、BLOB。只要我们包含其中一个字段,该表就不是“定长静态表”,所以MySQL引擎会使用另一种方法来处理。定长表会提高性能,因为MySQL会搜索得更快,因为这些定长表很容易计算下一条数据的偏移量,所以读取自然会快。12、垂直拆分“垂直拆分”是将数据库中的一张表按列拆分成若干张表的方法,可以减少表的复杂度和字段数,从而达到优化的目的。13、拆分DELETE或INSERT语句的两个操作都会锁表。14.列越小,速度越快对于大多数数据库引擎来说,硬盘操作可能是最重要的瓶颈。较小的列消耗较少的io资源。15.选择正确的存储引擎。MyISAM是MYSQL5.5之前的默认存储引擎。基于传统的ISAM类型,支持B-Tree和全文搜索,但不是事务安全的,不支持外键。不是原子的。支持表锁。InnoDB是一个事务引擎,支持ACID事务(实现4种事务隔离机制)、回滚、崩溃恢复能力和行锁。并提供与Oracle一致的解锁读方法。InnoDB将其表和索引存储在一个表空间中,该表空间可以包含多个文件。
