mysql 开发进阶篇系列 5 SQL 优化
程序员文章站
2022-06-16 13:26:32
一. 使用sql提示 sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操作的目的。 1.1 use index 在查询语句中表名的后面,添加use index 强制mysql使用该索引,不考虑其它索引。 1.2 ignore index 在查 ......
一. 使用sql提示
sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操作的目的。
1.1 use index
在查询语句中表名的后面,添加use index 强制mysql使用该索引,不考虑其它索引。
EXPLAIN SELECT * FROM city USE INDEX(ix1) WHERE city_id=1;
1.2 ignore index
在查询语句中表名的后面,添加ignore index,使用mysql忽视一个或者多个索引。
EXPLAIN SELECT * FROM city IGNORE INDEX(ix1) WHERE city_id=14;
1.3 force index
在查询语句中表名的后面,添加force index,当mysql不走索引时,强制走索引。
-- 某些情况下,有索引但mysql不走索引,强制使用 EXPLAIN SELECT * FROM city FORCE INDEX (PRIMARY) WHERE city_id>0;
二 .优化数据库对象
1. 优化表的数据类型
在mysql中,可以使用函数procedure analyse()对当前应用的表进行分析。对表列中的数据类型给出合理的改进建议,用户可以根据实际情况来考虑。
例如:下面生产库中有一个菜单表,字段类型及长度如下:
-- 使用procedure analyse()分析 SELECT * FROM Adm_Menu PROCEDURE ANALYSE(16,256);
下面remark 字段里面值的最大长度的是30长度, 所以系统建议给出30长度:
2. 通过折分提高表的访问效率
折分可以是垂直拆分和水平拆分,这是一种设计思路,这篇不讲。
3. 逆规范化
逆规范化也叫提高表的冗余,有利于提高查询性能。这是一种设计思路,这篇不讲。
4. 使用中间表提高统计查询速度
比如有一个大表记录了客户的每天消费记录,需要按月统计总消费金额, 可以放入到中间表,减轻大表的频繁查询. 这是一种设计思路,这篇不讲。
推荐阅读
-
mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
-
mysql 开发进阶篇系列 47 xtrabackup (完全备份恢复,恢复后重启失败总结)
-
mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)
-
mysql 开发进阶篇系列 34 工具篇 mysqlcheck(MyISAM表维护工具)
-
mysql 开发进阶篇系列 7 锁问题
-
mysql 开发进阶篇系列 35 工具篇 mysqldump(数据导出工具)
-
mysql 开发进阶篇系列 48 xtrabackup (增量备份与恢复)
-
mysql 开发进阶篇系列 4 SQL 优化
-
mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)
-
mysql 开发进阶篇系列30 数据库二进制包(安装指定路径,目录介绍)