mysql高级:数据库优化
来源:互联网 发布:微信pk10源码 编辑:程序博客网 时间:2024/05/20 09:44
数据库优化的基本十条原则。
1.尽量避免在列上进行运算,这样会导致索引失效。
2.使用JOIN时,应该用小结果集驱动大结果集。同事把复杂的JOIN查询拆分成多个query。因为JOIN多个表时,可能导致更多的锁定和堵塞。
例如:
SELECT * FROM A JOIN B ON A.id = B.id LEFT JOIN C ON C.time = A.date LEFT JOIN D ON C.pid = B.aid LEFT JOIN E ON E.cid = A.did
3.注意LIKE模糊查询的使用,避免%%。
例如:
SELECT * FROM t WHERE name LIKE '%de%'
优化为
SELECT * FROM t WHERE name >= 'de' AND name < 'df'
4.仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。
5.使用批量插入语句节省交互。
6.limit的基数比较大时使用between。
例如:
SELECT * FROM article order by id limit 1000000,10
优化为
SELECT * FROM article WHERE id between 1000000 and 1000010 order by id
between先定比limit快,所以在海量数据访问时,建议用between或是where替换掉limit.但是between也有缺点,如果id中间有断行活着中间部分id不读取的情况,总读取的数量会小于预计数量。
在取比较后面的数据时,通过desc方式把数据反向查找,以减少对前段数据的扫描,让limit的基数越小越好!
7.不要使用rand函数获取多条随机记录
例如:
SELECT * FROM table order by rand() limit 20;
优化
SELECT * FROM table AS t1 JOIN (SELECT ROUND (rand() * ((SELCT MAX (id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id) AS t2 WHERE t1.id >=t2.id ORDER BY t1.id LIMIT 1;
这是获取一条随机记录,这样即使执行20次,也比原来的语句高效。或者先用PHP产生随机数,把这个字符串传给mysql,mysql里用in查询。
8.避免使用NULL。
9.不要使用count(id),而应该是count(*)。
10.不要做无谓的排序操作,而应尽可能在索引中完成排序。
1.尽量避免在列上进行运算,这样会导致索引失效。
2.使用JOIN时,应该用小结果集驱动大结果集。同事把复杂的JOIN查询拆分成多个query。因为JOIN多个表时,可能导致更多的锁定和堵塞。
例如:
SELECT * FROM A JOIN B ON A.id = B.id LEFT JOIN C ON C.time = A.date LEFT JOIN D ON C.pid = B.aid LEFT JOIN E ON E.cid = A.did
3.注意LIKE模糊查询的使用,避免%%。
例如:
SELECT * FROM t WHERE name LIKE '%de%'
优化为
SELECT * FROM t WHERE name >= 'de' AND name < 'df'
4.仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。
5.使用批量插入语句节省交互。
6.limit的基数比较大时使用between。
例如:
SELECT * FROM article order by id limit 1000000,10
优化为
SELECT * FROM article WHERE id between 1000000 and 1000010 order by id
between先定比limit快,所以在海量数据访问时,建议用between或是where替换掉limit.但是between也有缺点,如果id中间有断行活着中间部分id不读取的情况,总读取的数量会小于预计数量。
在取比较后面的数据时,通过desc方式把数据反向查找,以减少对前段数据的扫描,让limit的基数越小越好!
7.不要使用rand函数获取多条随机记录
例如:
SELECT * FROM table order by rand() limit 20;
优化
SELECT * FROM table AS t1 JOIN (SELECT ROUND (rand() * ((SELCT MAX (id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id) AS t2 WHERE t1.id >=t2.id ORDER BY t1.id LIMIT 1;
这是获取一条随机记录,这样即使执行20次,也比原来的语句高效。或者先用PHP产生随机数,把这个字符串传给mysql,mysql里用in查询。
8.避免使用NULL。
9.不要使用count(id),而应该是count(*)。
10.不要做无谓的排序操作,而应尽可能在索引中完成排序。
0 0
- mysql高级:数据库优化
- 06.19 MySQL数据库主从复制服务及优化(高级)
- 数据库高级管理及优化
- MySQL高级内容和优化
- MYSQL数据库查询优化
- mysql数据库优化
- MySQL数据库优化
- mysql数据库优化(转)
- 优化 MySQL 数据库
- 优化MySQL数据库查询
- MySQL数据库优化五步走
- 优化MySQL数据库查询
- 优化MySQL数据库查询
- 优化MySQL数据库查询
- Mysql数据库优化配置
- MySQL数据库优化--SQL
- 优化mysql数据库方法
- 数据库优化之MySQL
- IDEA 关闭代码重复提示下划线
- oracle基础实验
- Android 2D翻转
- 使用wife连接手机进行appium自动化测试
- 简单重写类型为radio的input元素样式
- mysql高级:数据库优化
- ElementTree排序问题
- TCP/IP 详解 卷1 第1章 读书笔记
- 113-Remove Duplicates from Sorted List
- 人生需要整理
- 如何把Button按钮样式换成ImageButton?
- IDM杨幂版
- STL关联容器概述
- 禁止拖拽时选中文本的方法