mysql常见的优化总结

笔者工作中常见的优化总结:

  1. 尽量避免在列上进行运算,这样会导致索引失效; select * from t where YEAR(d) >=2011;优化为:select * from t where d>="2011-01-01";
  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. 使用批量插入语句节省交互.insert into t(id,name) VALUES(1,"a");
        insert into t(id,name) VALUES(2,"b");
        insert into t(id,name) VALUES(3,"c");优化为:INSERT INTO t(id,name) VALUES(1,"a"),(2,"b"),(3,"c");
  6. limit的基数比较大的时候使用between ,例如:select * from article as article order by id limit 1000000,10;优化为:select * from article where id between 1000000 and 1000010 order by id;
  7. 不要使用rand 函数获取多条随机记录.避免这么干:select * from table order by rand() limit 20;
  8. 避免使用 NULL;
  9. 不要使用count(id);而应该使用 count(*);
  10. 不要做无谓的排序操作,而应尽可能在索引中完成排序.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 使用索引 使用索引是优化 SQL 查询的最基本和最有效的方法。在大多数情况下,索引可以大大减少查询的执行时间。 例如,如果有一个 users 表,其中包含 10 万行数据,而我们要查询所有姓氏为“Smith”的用户,那么查询将需要遍历整个表。但是,如果我们为姓氏列添加一个索引,查询将只需要遍历索引,而不是整个表,从而减少了查询时间。 2. 避免使用 SELECT * SELECT * 是一种常见的选择,但它有时会导致查询效率低下。当你使用 SELECT * 时,数据库将返回表中的所有列,包括那些你可能不需要的列,这会消耗很多资源。此外,如果表中有大量数据,这可能会导致查询时间很长。 所以,最好只选择你需要的列。例如: SELECT first_name, last_name FROM users WHERE last_name = 'Smith'; 3. 使用 LIMIT 限制结果集 LIMIT 是一个非常有用的功能,可以限制结果集的大小。如果你只需要前几行数据,可以使用 LIMIT 来限制结果集的大小。 例如: SELECT first_name, last_name FROM users WHERE last_name = 'Smith' LIMIT 10; 这个查询只返回前 10 条满足条件的记录。 4. 避免使用子查询 子查询是一种查询嵌套在另一个查询内的方法。虽然它们是有用的,但它们通常比单个查询慢。 例如: SELECT first_name, last_name FROM users WHERE user_id IN (SELECT user_id FROM orders WHERE order_date = '2022-01-01'); 这个查询会选择那些在 2022-01-01 有订单的用户。但是,当 orders 表很大时,这个查询可能会变得非常慢。因此,最好将其重写为使用 JOIN: SELECT u.first_name, u.last_name FROM users u JOIN orders o ON u.user_id = o.user_id WHERE o.order_date = '2022-01-01'; 5. 使用 JOIN 替代子查询 JOIN 是一种将两个或多个表中的行组合在一起的方法。它通常比子查询更快。 例如: SELECT u.first_name, u.last_name FROM users u JOIN orders o ON u.user_id = o.user_id WHERE o.order_date = '2022-01-01'; 这个查询与之前的查询相同,但是使用 JOIN 代替了子查询,因此它应该更快。 6. 避免使用 LIKE '%value%' LIKE 运算符用于在列中搜索特定的字符串。但是,如果你使用了 %value%,这可能会导致查询效率低下。 例如: SELECT first_name, last_name FROM users WHERE last_name LIKE '%Smith%'; 这个查询将返回所有包含“Smith”这个字符串的姓氏。但是,这个查询可能会非常慢,因为它需要在每一行中搜索这个字符串。 因此,最好使用 LIKE 'value%' 或 LIKE '%value',这样可以利用索引来提高查询效率。 7. 使用 EXPLAIN 分析查询 EXPLAIN 是一个用于分析查询的关键字。它可以告诉你 MySQL 如何执行查询,并提供有关查询执行的详细信息。 例如: EXPLAIN SELECT first_name, last_name FROM users WHERE last_name = 'Smith'; 这个查询将返回一个表,其中包含 MySQL 执行查询所需的详细信息。你可以使用这些信息来识别查询中可能存在的问题,并进行优化总结 这些是优化 SQL 查询的一些基本方法,但是还有许多其他方法可以使用。最好的方法是了解你的数据,并根据需要进行优化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值