MYSQL-----SQL语句优化记录

本文分享了10种优化MySQL查询效率的方法,包括避免使用子查询、函数索引、OR条件,利用IN代替,LIKE语句优化,使用LIMIT限制返回记录数,确保数据类型一致,分组统计时禁止排序,避免随机取记录,去除不必要的ORDER BY,以及批量插入数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.不使用子查询

例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name=’hechunyang’);

例:SELECT * FROM t1 WHERE id=1

	在mysql5.5版本中在使用子查询的时候,它先执行外面的查询语句,然后在执行内部的查询,最后根据内部查询和外部查询的结果进行匹配筛选得到查询结果,这种方式大大降低了查询的性能
	在mysql5.6/mariaDB10版本及以后,它是将子查询自动转换成json关联方式对其进行了优化

2 避免函数索引

例:SELECT * FROM t WHERE YEAR(d) >= 2016; 由于MySQL不像Oracle那样支持函数索引,即使d字段有索引,也会直接全表扫描。 应改为

SELECT * FROM t WHERE d >= ‘2016-01-01’;

mysql是不支持函数索引的,因此我们在做查询的时候尽量的避免使用函数索引

3用IN来替换OR

低效查询
SELECT * FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;
高效查询
SELECT * FROM t WHERE LOC_IN IN (10,20,30);

4LIKE双百分号无法使用到索引

SELECT * FROM t WHERE name LIKE ‘%de%’;
如果查询条件前面添加了百分号,那么会导致在查询的时候无法使用索引

SELECT * FROM t WHERE name LIKE ‘de%’;
目前只有MySQL5.7支持全文索引(支持中文)

5读取适当的记录LIMIT M,N

SELECT * FROM t WHERE 1;
—–>
SELECT * FROM t WHERE 1 LIMIT 10

6避免数据类型不一致

SELECT * FROM t WHERE id = ’19’;
—–>
SELECT * FROM t WHERE id = 19;

7 分组统计可以禁止排序

SELECT goods_id,count(*) FROM t GROUP BY goods_id;
默认情况下,MySQL对所有GROUP BY col1,col2…的字段进行排序。如果查询包括GROUP BY,想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序。
—–>
SELECT goods_id,count(*) FROM t GROUP BY goods_id ORDER BY NULL;

8 避免随机取记录

SELECT * FROM t1 WHERE 1=1 ORDER BY RAND() LIMIT 4;
MySQL不支持函数索引,会导致全表扫描
—–>
SELECT * FROM t1 WHERE id >= CEIL(RAND()*1000) LIMIT 4;

9 禁止不必要的ORDER BY排序

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;
—–>
SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

10 批量INSERT插入

INSERT INTO t (id, name) VALUES(1,’Bea’);
INSERT INTO t (id, name) VALUES(2,’Belle’);
INSERT INTO t (id, name) VALUES(3,’Bernice’);
—–>
INSERT INTO t (id, name) VALUES(1,’Bea’), (2,’Belle’),(3,’Bernice’);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值