MySQL优化(一)常用SQL优化

以你之姓@ 2022-02-26 05:58 353阅读 0赞

一、新增:

二、删除:delete from 删除语句加where条件,如果是删除全部记录,使用truncate table 表名,而不使用delete语句。

三、修改

四、查询:索引这里就不重复了,一般在建表时对常用的查询字段就应该加上索引。

1、单表查询:首先尽量只查询单表,可以分解成多次单表查询的尽量分解;其次,在多表查询的优化中,也可以以表来单位来优化,如加索引等;

2、连接查询:对连接查询on后面的条件加上索引;

3、合并查询:

4、聚合函数查询:

5、分组查询group by:少用group by语句。如果使用了group by,消除group by的无谓排序:在group by ..后面加上 order by null;

6、排序order by:SQL查询会默认按照主表的id排序,尽量不要加上其他的排序;

7、in查询:in查询范围不要太大;

8、分页查询:千万级MySQL分页,使用 SELECT * FROM LIMIT 0,10 分别对表进行常规分页,当偏移量过大,如limit 1000000000,10扫描的行数会非常多造成查询过慢。MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,所以n越大,偏移量越大,性能就越差。优化方法有下面几种:

(1)子查询法:

  1. SELECT c1,c2,cn... FROM table WHERE id>=(SELECT id FROM table LIMIT 20000,1 ) LIMIT 10;

(2)只读索引方法::性能MySQL一书中提到的

  1. SELECT * FROM `content` AS t1
  2. JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
  3. WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;

优化前:SELECT c1,c2,cn… FROM member ORDER BY last_active LIMIT 50,5 优化后:

  1. SELECT c1, c2, cn .. . FROM member INNER JOIN (SELECT member_id FROM member ORDER BY last_active LIMIT 50, 5) USING (member_id)

区别在于,优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列。

(3)in查询法:第一步用用程序读取出ID,然后再用IN方法读取所需记录:

  1. SELECT id FROM table LIMIT 20000, 10;
  2. SELECT c1, c2, cn .. . FROM table WHERE id IN (id1, id2, idn.. .)

建议使用第一种子查询方法,即:

  1. #查询分页
  2. SELECT
  3. id
  4. FROM
  5. t_user
  6. WHERE
  7. ...
  8. AND id >= (
  9. SELECT
  10. id
  11. FROM
  12. t_user
  13. WHERE
  14. ...
  15. LIMIT (page - 1) * pageSize,
  16. 1
  17. )
  18. LIMIT pageSize;

9、

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读

    相关 sql优化方法

    1.尽可能建立索引,包括条件列,连接列,外键列; 2.尽可能让where中的列顺序和复合索引中的列顺序一样; 3.尽可能不要使用select \ ,而只列出自己需要的字段列

    相关 SQL优化

    1. 对查询进行优化,要尽量避免全表扫描,首先应考虑在 `where` 及 `order by` 涉及的列上建立索引。 如果对您有帮助 ,请多多支持.多少都是您的心意与支持