只有5种吗?我知道十种以上的说。
索引(没我得全表查询了)
改变数据储引擎(MyISAM没事务再也不用担心锁表了)
增加冗余数来减少连表查询数(消耗硬盘空间减少CPU使用)
调整查询顺序减少查询量优先(数量少了连表的笛卡儿积也少了)
全文索引(文字长度有限制,而且IO使用量会大增,但是妥妥的快)
查询尽量不要用函数(函数可是不走索引的哦亲)
查询变量类型要提前对好减少系统负担(我提前改变了系统你就不用检测了)
升级服务器硬件(没什么是氪金解决不了的)
配置好临时表空间,合理理由临时表减少主表查询抢资源(唯我独查)
合理理由函数减少系统的判断(明明都能确认内容不同你用UNION 系统还是傻傻的查一遍是否重复 UNION ALL则跳过这个步骤同理 inner join 和 left join 也一样 )
强制走索引(复合索引的情况有时候手动走比系统判断要好哦)
脏读、幻读等(你堵车我绕路)
数据归档,迁移(没用的数据要进仓哦,别占着主表的资源)
表的碎片整理(迁移后碎片整理更健康哦亲)
索引重构(数据都走了索引也应该重构一下才能保证速度哦)
善用存储过程(串N个表(N大于10)的查询千万别一个SQL到底,分布式查询在吧结果集合并吧骚年)
预处理数据(mysql也有job哦,对于经常要子查询的数据可以先弄个明细表根据主表在后台进行补完,查询的时候就更方便了)
懒得说了。。。。。。。。。。。。。。。。。。
mysql的优化大的有两方面:1、配置优化
配置的优化其实包含两个方面的: *** 作系统内核的优化和mysql配置文件的优化
1)系统内核的优化对专用的mysql服务器来说,无非是内存实用、连接数、超时处理、TCP处理等方面的优化,根据自己的硬件配置来进行优化,这里不多讲;
2)mysql配置的优化,一般来说包含:IO处理的常用参数、最大连接数设置、缓存使用参数的设置、慢日志的参数的设置、innodb相关参数的设置等,如果有主从关系在设置主从同步的相关参数即可,网上的相关配置文件很多,大同小异,常用的设置大多修改这些差不多就够用了。
2、sql语句的优化
1、 尽量稍作计算
Mysql的作用是用来存取数据的,不是做计算的,做计算的话可以用其他方法去实现,mysql做计算是很耗资源的。
2.尽量少 join
MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。
3.尽量少排序
排序 *** 作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL的响应时间。
对于MySQL来说,减少排序有多种办法,比如:
通过利用索引来排序的方式进行优化
减少参与排序的记录条数
非必要不对数据进行排序
从句子中可以看到,选取的字段比较多,另外连接条件也比较多,另外还包括了子查询。就此语句给出几个需要注意的问题:
1、请先使用explain,对这个语句进行分析,EXPLAIN解释SELECT命令如何被处理。这不仅对决定是否应该增加一个索引,而且对决定一个复杂的Join如何被MySQL处理都是有帮助的。
2、尽量在连接条件多的时候,把数据提取量少的条件放在前面,这样会减少后一个条件的查询时间。对了,这些经常用的连接条件最好建上索引。我不清楚
INNER JOIN table_user_profile AS up ON up.uid = u.uid
INNER JOIN table_user_count AS uc ON uc.uid = u.uid
INNER JOIN table_user_daren AS ud ON ud.uid = u.uid
这些那个先内连接数据比较少,自己排列一下试一试。
3、避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的 *** 作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据。像in和not in这样的关键字用exists和not exists比较好。u.uid not in(SELECT uid FROM table_user_follow where f_uid=100)改成u.uid not exists(SELECT uid FROM table_user_follow where f_uid=100),效率会有提高。
4、mysql使用函数的时候会增加负担,完全可以交给脚本程序去解决。比如此子查询:
SELECT MAX(share_id) FROM table_share 完全可以不写在这个sql语句中,交给脚本程序可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)