MySQL优化

2020-02-27 177浏览

  • 1.MySQL 优化 网站基础应用组:汪千 联系我们 : 广州市建中路 50 号多玩大厦Email:yourname@chinaduo.comTel:020 12345678
  • 2.原则  80/20 法则  避免不必要操作  时空权衡 28/06/18 联系我们 : 广州市建中路
  • 3.常用 MySQL 操作  INSERT -> C  SELECT -> R  UPDATE -> U  DELETE -> D  R+U/C+D -> 80/20  R/U -> 80/20 28/06/18 联系我们 : 广州市建中路
  • 4.SELECT/UPDATE  锁:读锁( SELECT )写锁( UPDAT E)  查找记录(行)  磁盘 IO ( UPDATE ) 28/06/18 联系我们 : 广州市建中路
  • 5.锁: MyISAM vs InnoDB  MyISAM :表锁 / 加锁快 / 冲突概率高 / 并发低  InnoDB :行锁 / 加锁慢 / 冲突概率低 / 并发高  如果 SELECT 和 UPDATE 比较平均, InnoDB 性能更好。  InnoDB 在不使用索引时也会锁表。  大量使用 select count(*) 的表不宜用 InnoDB 。 28/06/18 联系我们 : 广州市建中路
  • 6.查找记录(行)  SELECT * FROM tbl WHERE col1='xxx';  全表扫描。  关系型数据库  表 -> 关系(集合)  行 -> 元素(向量)  ( 学号 , 姓名 , 性别 , 班级 )('1', ' 张三 ', ' 男 ', '2')  字段的值:可以比较大小,包括 'abc%' 28/06/18 联系我们 : 广州市建中路
  • 7.索引  加速检索  约束( PRIMARY KEY/UNIQUE KEY/FOREIGN KEY ) 28/06/18 联系我们 : 广州市建中路
  • 8.Profiling  SET PROFILING=1;  SHOW PROFILES;  SHOW PROFILE FOR QUERY 1; 28/06/18 联系我们 : 广州市建中路
  • 9.索引的效果 28/06/18 联系我们 : 广州市建中路
  • 10.MySQL 索引  单列索引  唯一索引 UNIQUE KEY  主键索引 PRIMARY KEY  组合索引 28/06/18 联系我们 : 广州市建中路
  • 11.MySQL 索引  BTREE 28/06/18 联系我们 : 广州市建中路
  • 12.组合索引  ALTER TABLE tbl ADD INDEX idx1(a, b, c);  实际上建立了 3 个索引 (a) , (a, b) , (a, b, c) 28/06/18 联系我们 : 广州市建中路
  • 13.组合索引 • 索引生效: • a>5 • a=5 and b > 6 • A=5 and b in (2,3) and c > 5 28/06/18 联系我们 : 广州市建中路
  • 14.组合索引 • 索引失效: • b>5 • B=6 and c = 7 28/06/18 联系我们 : 广州市建中路
  • 15.组合索引 28/06/18 联系我们 : 广州市建中路
  • 16.组合索引 • 索引部分生效: • a>5 and b = 2 • A = 5 and b > 6 and c = 2 • 如果组合索引中Seq_in_index 为n 的列 的条件是开区间 ( a>6;a<100 ), Seq_in_index 大于 n 的列上的索引失效。 28/06/18 联系我们 : 广州市建中路
  • 17.组合索引 • key_len :索引使用字节数 28/06/18 联系我们 : 广州市建中路
  • 18.索引失效  不是组合索引的最左前缀。  LIKE 以 '%' 开头。  WHERE col1=123; 列 col1 是 CHAR/VARCHAR/TEXT 类型。  ORDER BY 子句混合使用 ASC 和 DESC 。  ORDER BY 使用的列和 WHERE 的不同。  对不同的键使用 ORDER BY 。  错误使用组合索引。  OFFSET 过大 28/06/18 联系我们 : 广州市建中路
  • 19.设计索引的原则  出现在 WHERE 子句和 JOIN 子句中的 列要考虑增加索引。 MySQL 实现 JOIN 时会执行内部循环。  列的值越分散,用作索引的效率越高。  字符串使用前缀做索引。  避免过渡索引。 28/06/18 联系我们 : 广州市建中路
  • 20.索引使用情况  SHOW STATUS LIKE 'Handler_read%';  Handler_read_key 行被索引值读取的次数。  Handler_read_rnd_next 读取下一行的请求数 。 28/06/18 联系我们 : 广州市建中路
  • 21.SQL 语句优化  大批量插入数据  MyISAM  ALTER TABLE t DISABLE KEYS;  -- loading data  ALTER TABLE t ENABLE KEYS;  避免多次更新索引。 28/06/18 联系我们 : 广州市建中路
  • 22.SQL 语句优化  大批量插入数据  InnoDB  SET UNIQUE_CHECKS=0;  SET AUTOCOMMIT=0;  -- loading data  SET AUTOCOMMIT=1;  SET UNIQUE_CHECKS=1;  导入数据按主键排列。 28/06/18 联系我们 : 广州市建中路
  • 23.SQL 语句优化  将多条 INSERT 合并:  INSERT INTO t VALUES (1, 2),(1,3), (1,4),...  避免 GROUP 引发排发 发序发:  SELECT a, COUNT(*) FROM t GROUP BY a ORDER BY NULL; 28/06/18 联系我们 : 广州市建中路
  • 24.SQL 语句优化 • 让 ORDER BY LIMIT 使用索引 KEY(A,B) 使用索引 ORDER BY A A=5 ORDER BY B ORDER BY A DESC, B DESC A > 5 ORDER BY A 28/06/18 联系我们 : 广州市建中路
  • 25.SQL 语句优化 • 让 ORDER BY 使用索引 KEY(A,B) 不使用索引 ORDER BY B A>5 ORDER BY B ORDER BY A ASC, B DESC 28/06/18 联系我们 : 广州市建中路
  • 26.SQL 优化 • 慎用 OFFSET SELECT * FROM t LIMIT 10, 20; SELECT * FROM t LIMIT 20 OFFSET 10; SELECT * From `comment3_record` as c ORDER BY `created` DESC LIMIT N, M 28/06/18 联系我们 : 广州市建中路
  • 27.OFFSET 有害 28/06/18 联系我们 : 广州市建中路
  • 28.OFFSET 替代方案 28/06/18 联系我们 : 广州市建中路
  • 29.MySQL query cache  Show variables like '%query_cache %';  Show status like 'Qcache%'; 28/06/18 联系我们 : 广州市建中路