首页 > 数据库 >mysql语句性能优化(一)

mysql语句性能优化(一)

时间:2023-05-10 17:12:26浏览次数:36  
标签:语句 优化 子句 索引 num mysql where id select

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

2、应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值

3、应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。

4、应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询:

select id from t where num=10 union all select id from t where num=20

5、in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:

Select id from t where num between 1 and 3

6、模糊查询like时注意:以下两种将导致全表扫描

select id from t where name like ‘%abc%’
select id from t where name like ‘%abc’

若要提高效率,可以考虑全文检索。

select id from t where name like ‘abc%’

7、如果在 where 子句中使用参数,也会导致全表扫描。

8、应尽量避免在 where 子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作

9、很多时候用 exists 代替 in 是一个好的选择:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)

10、索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

标签:语句,优化,子句,索引,num,mysql,where,id,select
From: https://www.cnblogs.com/lijiaxiang/p/17388529.html

相关文章

  • mysql常用命令
    mysqlAccessdeniedforuserroot@localhost错误解决方法总结,安装后修改密码Mysql初始化root密码和允许远程访问 mysql命令:基本文本的,显示和使用的mysql数据库。前面已经简单的提过用法;比如登录等。mysqladmin命令,用来创建和维护mysql数据库的命令,......
  • MySQL 锁实践
    测试环境为MySQL5.7 隔离级别:REPEATABLE-READ自动提交:autocommitOFF创建测试表:CREATETABLE`t1`(`id`int(11)DEFAULTNULL,`name`varchar(10)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=latin1insertintot1(id,name)values(1,"mirror");insertintot1......
  • MySQL的随机排序(random orderby)
    MySQL的随机排序(randomorderby)是指在查询数据库时,将结果集以随机的方式排列。这种排序方式可以用于有趣的应用场景,例如实现随机音乐播放、广告推荐等。要实现MySQL的随机排序,可以使用RAND()函数。RAND()函数可以生成0-1之间的随机数,将它作为排序的依据即可。SELECT*FROM`my......
  • [系统性能优化实践]JVM进阶实战之监控工具(Prometheus)
    1Prometheus监控SpringCloudGateway1.1简述API网关作为应用服务与外部交互的入口,通过对API网关的监控,可以清晰的知道应用整体的请求量,以便根据不同的并发情况进行扩容处理。对API网关的监控也是相当必要的。通过Prometheus监控Gateway与监控普通Springboot项目几乎......
  • 用sql语句实现sqlserver不同库间表相互同步
    同步表的方式有很多种因为不想太过于麻烦所以就用存储过程来实现某些表同步createproccopytbaleas--表名declare@namenvarchar(50)--创建表declare@createtablenvarchar(200)--删除表declare@deletetablenvarchar(200)--定义游标declaretabnameCURSORF......
  • sql优化随笔1
    MySQL性能最大数据量最大并发数查询耗时0.5秒实施原则数据表设计数据类型避免空值text类型索引优化索引分类优化原则SQL优化分批处理不做列运算避免Select*操作符<>优化OR优化IN优化LIKE优化JOIN优化LIMIT优化其他数据库  博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现......
  • 【完结撒花】MySQL(二十三)主从复制
    MySQL(二十三)主从复制1主从复制概述1.1如何提高数据库并发能力在实际工作中,常将Redis和MySQL配合使用,如果有请求的时候,首先在缓存中查找,如果存在就直接取出,不存在再访问数据库,这样就提升了读取的效率,减少了对后端数据库的访问压力,Redis缓存是高并发架构非常重要的一环......
  • mysql中删除时报错Cannot truncate a table referenced in a foreign key constraint
    在Mysql使用Truncate截断表时,提示Cannottruncateatablereferencedinaforeignkeyconstraint(monitoritem,CONSTRAINTmonitortaskpollutant_monitortask_fk)。这是因为存在外键约束导致的无法删除,我们可以先关闭外键约束,删除后再启动外键约束。1、检查外键约束SELE......
  • PSO优化LSTM做时间序列的预测,优化的是隐藏层单元数目,批处理大小,时间窗口大小,学习率等
    PSO优化LSTM做时间序列的预测,优化的是隐藏层单元数目,批处理大小,时间窗口大小,学习率等网络参数。ID:1888668442690309......
  • mysql创建systemd管理项
    vim/usr/lib/systemd/system/mysqld.service写入system配置:[Unit]Description=MySQLServerDocumentation=mysqld##mysql参考手册Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=mul......