首页 > 数据库 >mysql优化原则

mysql优化原则

时间:2023-06-27 19:33:06浏览次数:53  
标签:COUNT name 原则 admin where mysql 优化 id select

1.尽量不要在列上运算,这样会导致索引失效
例如:select * from admin where year(admin_time)>2014
优化为: select * from admin where admin_time> '2014-01-01′
2.limit的基数比较大时,使用between and代替
例如:select * from admin order by  admin_id limit 100000,10
优化为:select * from admin where admin_id between 100000 and 100010 order by admin_id。
3.使用 JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理, right join 同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和阻塞)。
select * from admin left	join	log on admin.admin_id	= log.admin_id where log.admin_id>10
优化为:select * from (select * from admin where admin_id>10) T1 lef join log on T1.admin_id = log.admin_id。
4.仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。
例如原句为: 
SELECT * FROM Member;
优化为:
SELECT id,name,pwd FROM Member;
5.避免使用NULL。

where 子句中可以对字段进行 null 值判断吗?
可以,比如 select id from t where num is null 这样的 sql 也是可以的。但是最好不要给数据库留NULL,尽可能的使用 NOT NULL 填充数据库。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL 也包含在内),都是占用 100 个字符的空间的,如果是 varchar 这样的变长字段,null 不占用空间。可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询:select id from t where num= 0。

6.不要使用count(id), 而应该是count( * )。

1.COUNT() 不涉及对具体列的处理:当使用 COUNT() 时,MySQL 不需要考虑具体的列或表达式,它只需统计满足条件的行数。这样可以避免对列进行处理和计算,从而提高计数的效率。
2.COUNT() 可以利用索引:当使用 COUNT() 时,MySQL 可以直接利用已经存在的索引进行计数。因为 COUNT() 不需要关注具体的列或表达式,它只需要扫描索引即可得到满足条件的行数。这样可以减少对数据行的访问,提高计数的速度。
3. COUNT(
) 的语义更明确:使用 COUNT(*) 可以更清晰地表达对整个行数的计数。它表示计算结果是满足条件的行数,而不是特定列或表达式的计数。

7.使用批量插入语句节省交互。
例如原句为: 
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'); 

标签:COUNT,name,原则,admin,where,mysql,优化,id,select
From: https://www.cnblogs.com/yliunyue/p/17509744.html

相关文章

  • MySQL参数max_connect_errors分析释疑
    最近一MySQL服务器,由于一些特殊因素遇到“ERROR1129(00000):Host'xxx'isblockedbecauseofmanyconnectionerrors.Unblockwith'mysqladminflush-hosts'”,在问题解决后,在详细了解参数max_connect_errors的过程中,有些不同网络资料的矛盾描述确实让我有点迷惑和混淆(关......
  • MySQL主从复制参考
    https://blog.csdn.net/qq_52061700/article/details/126979017https://www.jb51.net/article/180748.htm相关执行命令:mysqldump-uroot-p密码--opt-R数据库名称>/opt/app/bak.sql;--主数据库备份,用来导入从数据库,保证两边数据一致CREATEUSERcopyoperatorIDENTIFI......
  • 如何高度优化适用于企业的AI (二) 数据准备
    我们先从快速浏览整个过程首先,我们需要数据,要尽可能使用CSV/Json格式,基于这些信息,我们要让AI获取所有所需要的信息来正确的完成它的工作准备数据,微调过程需要很长的书剑才能运行,我们肯定是不希望出现错误的,所以我们使用OpenAI的数据准备工具(CLItool)来处理我们......
  • 数据库架构优化
    数据库架构优化一.分库分表1.整除取余比如有user有10个库,每个库有100张表userid=100087存放的数据库和表格的路径100087%10=7第7个库10087%100=87第87张表2.根据id最后1位和两位插入数据库和表Id的最后1位为数据库的位置Id的最后两位为表格的位置二.读写分离,主从配置主数据库进......
  • 代码优化
    代码优化1.使用对象池减少对重复对象的创建,比如tcp链接、数据库链接、多线程2.调整连接数,连接池、数据库链接数、tomcat、nginx连接数3.利用缓存技术增加缓存、本地缓存(tomcat内存之中,不走网络)、redis缓存4.串行改并行,即单线程改多线程5.同步改异步,使用场景:本次调用接口的结果会影......
  • mysql中如何查看表是否被锁
    如何查看是否发生死锁在使用mysql的时候,如何查看表是否被锁呢?查看表被锁状态和结束死锁步骤:1.在mysql命令行执行sql语句usedbName;//切换到具体数据库showengineinnodbstatus;//查询db是否发生死锁12 2.查看数据表被锁状态showOPENTABLESwhereIn_use>0......
  • 如何高度优化适用于企业自定义的AI (一) 序言
    概述在当前信息时代的背景下,社会对AI的需求在不断增长.AI的快速发展得益于大数据、云计算和计算能力的提升,使得机器学习和深度学习等技术取得了重大突破.AI在图像识别、语音识别、自然语言处理等领域展现出惊人的能力,为企业带来了巨大的商机.然而,通用的AI解决方案无法......
  • docker compose 配置 mysql 容器启动时创建数据库
    要在DockerCompose中配置MySQL容器,在容器启动时创建数据库,你可以按照以下步骤进行操作:在你的DockerCompose文件中,定义一个MySQL服务。确保你已经设置了适当的环境变量,如MYSQL_ROOT_PASSWORD和MYSQL_DATABASE。下面是一个示例的DockerCompose配置:version:'3'......
  • 微信商家转账零钱优化版
    配置文件<?phpreturn['abc'=>["merchant_id"=>env('POINT_ABC_MERCHANTID'),"app_id"=>env('POINT_ABC_APP_ID'),"......
  • redis-分布式锁优化思路
    1.加锁的代码块,粒度越小越好,语句越少越好,更不容易出现"插队"的现象2.分段锁思路:以"超卖"为例,原本是待促销200件商品,一把锁,现改成10款20件商品的促销,改成10把锁,当并发小于10的时候,甚至都不需要锁,就可以并发安全......