谈谈MySQL优化方面的常用方法(最详细)
1.选取最适用的字段属性,可以的情况下,应该尽量把字段设置为NOT NULL 2.使用连接(JOIN)来代替子查询 3.使用联合来代替手动创建的临时表 4.增删改或者多条查询数据时使
MySQL优化方法: 1.选取最适用的字段属性,可以的情况下,应该尽量把字段设置为NOT NULL 2.使用连接(JOIN)来代替子查询 3.使用联合来代替手动创建的临时表 4.增删改或者多条查询数据时使用事务操作 5.锁定表(代替事务的另一种方法) 6.使用外键(锁定表的方法可以维护数据的完整性,但它不能保证数据的关联性,应该使用外键) 7.可以优化SQL查询算法,提高查询速度 8.给数据量大的查询次数频繁而修改次数少的数据表添加索引,提升查询速度 MySQL优缺点: 优点:体积小、速度快、总体拥有成本低、开源mysql优化教程,支持多种操作系统,提供接口支持多种语言连接操作。其核心程序采用完全的多线程编程,可以灵活地为用户提供服务而不会耗费过多的系统资源,MySQL具有灵活而安全的权限和口令系统,客户与MySQL数据库连接是,所有的口令传送被加密,还支持主机认证。支持大型数据库,支持千万条记录的数据库,拥有非常快速而且稳定的基于线程的内存分配系统,可以持续使用而不必担心其稳定性。 缺点:不支持热备份,MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用。 1.多用 limit 很多情况下,我们知道查询表只会有一条结果。在这种情况下,我们不妨加上limit 1,这样可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是占据cpu继续往下查直到查询表中的最后一条数据为止。 低效率:
复制 高效率:
复制 2.尽量不用ORDER BY RAND() 要从tablename表中随机提取一条记录,大部分的人写法是:
复制 但是官方是不提倡这种用法的,官方手册提及到ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。 当你想使用随机取一条记录的时候,用max(id) * rand()就可以了,花费的时间应该在0.1秒以内。 3. EXPLAIN你的SELECT查询 EXPLAIN关键字的作用是让你可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构。从根本处找出可以优化的地方,EXPLAIN的查询结果也会告诉你,你的索引主键被如何利用的,你的数据表是如何被搜索和排序的,通过对这些信息的查看,你可以对自己的查询语句做相应的调整 explain select * from statuses_status where id=11; 4.避免 SELECT 我们需要哪些属性就取哪些,避免全盘接收。比如我们比如我们只需要查询id和name两个属性,那么我们可以使用
复制 尽量避免使用select * ,虽然有时效果一样,但效率不一样。 5. 为搜索字段建索引 索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么为其建立索引。 普通索引 添加INDEX
复制 主键索引 添加PRIMARY KEY
复制 唯一索引 添加UNIQUE
复制 全文索引 添加FULLTEXT
复制 6.利用查询缓存来优化查询 当MySQL开启了缓存模式(query_cache_type=1)后,mysql会把查询语句和查询结果保存在一张hash表中,下一次用同样的sql语句查询时,mysql会先从这张hash表中获取数据,如果缓存没有命中,则解析sql语句,查询数据库。 当缓存的数据达到最大值(query_cache_size) 后,mysql会把老的数据删除掉,重新写入新的数据。 查看缓存的语句:
复制 7.尽量不使用NOT IN和like语句操作 NOT IN和like“%aaa%”操作都不会使用索引,将进行全表扫描。可取的方法是NOT IN可以NOT EXISTS代替。 (注意的是like “aaa%”是可以使用索引的) 8.UNION-ALL代替UNION 如果业务上没有特殊说明,可以考虑用UNION-ALL 替换UNION,因为UNION-ALL不会过滤重复数据,所执行效率要快于UNION,并且UNION可以自动排序,而UNION-ALL不会,这些细节往往都影响了数据库的性能。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |