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 联系我们 : 广州市建中路