关于MYSQL优化(持续更新)

时间:2022-09-20 20:40:39

*利用MYSQL数据缓存提高效率,注意事项:

  1.应用环境:不经常改变的表及对此表相同的查询

  2.不适用于服务器端编写的语句

  3.根据数据使用频率,合理分解表

  4.合理使用默认条件,提高命中率

  5.统一SQL语句编写规范,因为MYSQL解析时区分大小写

  6.增加服务器缓存空间

 

*为查询缓存,优化查询语句:

// 查询缓存不开启 
$r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); 

// 开启查询缓存 
$today = date("Y-m-d"); 
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'"); 

用变量代替MYSQL函数,开启缓存

 

*EXPLAIN你的SQL语句,分析查询效率

*只要一行数据时,使用LIMIT 1

*为不经常添加修改,又经常查询的字段,添加索引

  很蛋疼的一件事,自行衡量是否添加

*JOIN表的时候,使用相同类型的列,STRING类型,两表字符集要一致

*不使用 ORDER BY RAND(),性能会指数级下降

// 千万不要这样做: 
$r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); 

// 这要会更好: 
$r = mysql_query("SELECT count(*) FROM user"); 
$d = mysql_fetch_row($r); 
$rand = mt_rand(0,$d[0] - 1); 

$r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

*避免SELECT *,应该用什么取什么,会导致速度变慢及网络负载加重

*使用VARCHAR类型当主键会降低性能,永远为每张表设置ID,最好为INT型(推荐UNSIGNED),并自增

*为有限取值的列使用ENUM

*选择性使用PROCEDURE ANALYSE()建议

*尽可能使用NOT NULL

*把IP地址存成UNSIGNED INT

*固定长度的表会更快

*垂直分割,注意分出去的表不经常被JOIN,否则性能会级数下降

*拆分大的DELETE 或 INSERT

*越小的列会越快,比如仅几条数据的主键可采用SMALLINT、TINYINT

*选择正确的存储引擎