1、避免操作多余数据:使用WHERE
条件语句限制要查询的数据,避免返回多余的行,尽量避免SELECT
,改使用SELECT 列名
,避免返回多余的列,若插入数据过多,考虑批量插入,尽量避免同时修改或删除过多数据,因为会造成CPU利用率过高,从而影响别人对数据库的访问,建议分批操作,尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理,大数据量的查询,优先使用分页查询,仍不能满足需求的,考虑使用ES或者分库分表。
2、避免删库跑路:删除数据时,一定要加WHERE
语句。
3、where查询字句优化:避免在WHERE
子句中的“=”左边进行内置函数、算术运算或其他表达式运算,避免在WHERE
子句中使用!=
或<>
操作符,避免在WHERE
子句中使用OR
操作符。WHERE
子句中考虑用默认值代替NULL
,不要在WHERE
字句中使用NOT IN
,合理使用EXISTS & IN
,谨慎使用DISTINCT
关键字。
4、limit查询优化:查询一条或者最大/最小一条记录,建议使用LIMIT 1
,优化LIMIT
分页。
5、like语句优化:优化LIKE
语句。
6、索引优化:查询时应避免全表扫描,首先考虑在WHERE
和ORDER BY
设计的列上建立索引,使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则,索引不要超过6个,删除冗余和无效的索引,尽量使用数字型字段,尽可能的使用VARCHAR/NVARCHAR
代替CHAR/NCHAR
,建议使用自增主键。
下面是关于mysql数据库语句优化的两个问题以及解答:
问题一:如何在MySQL中创建和使用索引?
解答:在MySQL中,可以使用CREATE INDEX
语句为表的一个或多个列创建索引,为table_name
表中的column_name
列创建一个名为idx_column
的索引,可以使用以下语句:
CREATE INDEX idx_column ON table_name(column_name);
在查询时,如果查询条件中使用了索引列,MySQL将自动使用索引来加速查询,以下查询将使用上面创建的idx_column
索引:
SELECT * FROM table_name WHERE column_name = 'value';
问题二:如何避免在MySQL查询中使用函数导致索引失效?
解答:在MySQL中,如果在WHERE
子句中使用函数对列进行操作,将导致索引失效,为了避免这种情况,应尽量避免在WHERE
子句中使用函数,以下查询将导致索引失效:
SELECT * FROM table_name WHERE DATE_FORMAT(date_column, '%Y%m%d') = '20230101';
为了解决这个问题,可以将函数操作移到查询条件之外,如下所示:
SELECT * FROM table_name WHERE date_column = STR_TO_DATE('20230101', '%Y%m%d');