当前位置: 首页 > news >正文

网站制作成品免费网站建设网络推广平台

网站制作成品免费,网站建设网络推广平台,怎么自己设置网站模板,免费商标图案logoSQL优化 插入数据 insert优化 1)批量插入 insert into tb_user values(1,Tom),(2,Cat),(3,Jerry); 2)手动提交事务 mysql 默认是自动提交事务,这样会导致频繁的开启和提交事务,影响性能 start transaction insert into tb_us…

SQL优化

插入数据

insert优化

  • 1)批量插入

insert into tb_user values(1,'Tom'),(2,'Cat'),(3,'Jerry');

  • 2)手动提交事务

mysql 默认是自动提交事务,这样会导致频繁的开启和提交事务,影响性能

start transaction

insert into tb_user values(1,'Tom'),(2,'Cat'),(3,'Jerry');

insert into tb_user values(4,'Tom'),(5,'Cat'),(6,'Jerry');

insert into tb_user values(7,'Tom'),(8,'Cat'),(9,'Jerry');

commit;

  • 3)主键顺序插入

主键乱序插入会导致索引页频繁的进行页分裂,导致性能降低,具体参见主键优化中的内容。

主键乱序插入:8 1 9 21 88 2 4 15 89 5 7 3

主键顺序插入:1 2 3 4 5 7 8 9 15 21 88 89

大批量插入数据

如果一次性需要插入大批量数据,使用insert语句插入性能较低,此时可以使用mysql数据库提供的load指令进行插入,操作如下:

需要三步:

1、客户端连接服务端时,加上--local-infile

mysql --local-infile -u root -p

2、设置全局参数local_infile为1,开启从本地加载文件导入数据的开关

set global local_infile=1;

3、执行load指令,将准备好的数据加载到表结构中。

load data local infile ‘地址(例如:/root/mysql1.sql)’  into table '表名称(例如:table_name)'  fields terminated by ',' lines terminated by '\n'

主键优化

数据组织方式

在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(Index Orgnized Table IOT)

mysql的逻辑存储结构如下:

页分裂

页可以为空,也可以填充一半,也可以填充100%,每个页包含了2-n行数据(如果一行数据过大,会行溢出),根据主键排列。

主键顺序插入

主键乱序插入

主键乱序插入,会造成页分裂,应该尽量避免这种现象。

页合并

当删除一行记录时,实际上记录并没有被物理删除,只是记录被标记(flaged)为删除,并且它的空间变得允许被其他记录声明使用。

当页中删除的数据超过MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后),看看是否可以将两格页合并以优化空间使用

小贴士:

MERGE_THRESHOLD:合并页的阈值,可以自己设置,在创建表或创建索引时指定。

⭐️主键设计原则:

满足业务需求的情况下,尽量降低主键长度。(因为二级索引的页节点存储的是主键)

插入数据时,尽量选择顺序插入,选择AUTO_INCREMET的自增主键

尽量不要使用UUID做主键或者其他自然主键做主键,例如身份证号。

业务操作时,尽量避免对主键的修改

order by 优化

order by的查询计划中Extra有两种:

排序分类

Using filesort:通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中进行排序操作,所有不是通过索引直接返回排序结果的排序,都叫FileSort排序。

Using index:通过有序索引扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高

演示

没有创建索引时,根据age、phone进行排序

explain select id,age,phone from tb_user order by age,phone;

创建索引,排序方式是asc默认,可以省略

create index idx_user_age_phone_aa on tb_user(age,phone)

创建索引后,根据age、phone进行升序排序,走索引,using index

explain select id,age,phone from tb_user order by age,phone;

创建索引后,根据age、phone进行降序排序,走索引,backward index scan;using index

explain select id,age,phone from tb_user order by age desc,phone desc;

根据age、phone进行排序,一个升序,一个降序

explain select id,age,phone from tb_user order by age asc,phone desc;

创建索引

create index idx_user_age_phone_sd on tb_user(age asc,phone desc)

根据age、phone进行排序,一个升序,一个降序 using index

explain select id,age,phone from tb_user order by age asc,phone desc;

order by优化原则

根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则;

尽量使用覆盖索引;

多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC)

如果不可避免的出现了filesort大数据量排序的时候,可以适当增大排序缓冲区大小sort_buffer_size(默认是256K)

group by 优化

演示

优化原则

在分组操作时,可以通过索引提高效率;

分组操作时,索引的使用也是满足最左前缀法则;

limit 优化

一个常见又非常头疼的问题是limit 2000000,10,此时需要mysql排序前2000010条记录,仅返回2000000-2000010的记录,其他数据丢弃,查询排序的代价非常大

优化思路:覆盖索引+子查询

一般分页查询时,通过创建覆盖索引,能够比较好的提高性能,可以通过覆盖索引加子查询的方式优化。

explain select * 
from tb_sku t,
(select id from tb_sku order by id limit 2000000,10)a 
where t.id=a.id

count 优化

explain select count(*) from tb_sku;

count的快慢是有存储引擎决定的

MyISAM把一个表的数据总行数存在了磁盘上,因此执行count(*)的时候直接返回这个数,效率很高;

InnoDB引存储擎就麻烦了,它执行count(*)的时候,需要把数据一行一行的从引擎里读出来,然后累积计数;

优化思路:自己计数

例如存入redis

count的几种用法

count()是一个聚合函数,对于返回的结果集,一行一行的判断,如果count函数的参数不是null,累计值就加1,否则不加,最后返回累计值。

用法:count(*)、count(主键)、count(字段)、count(1)

效率

count(字段)<count(主键)<count(1)≈count(*)

所以尽量使用count(*)

update优化

演示

行级锁

表级锁

InnoDB的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁

优化原则:

尽量使用行级锁,避免表级锁;

更新条件使用索引,加的锁是行锁;

索引失效,导致行锁升级表锁;

总结

http://www.yayakq.cn/news/253090/

相关文章:

  • 猎聘招聘官方网站建模师的就业前景
  • 大学网站html模板下载青海wap网站建设比较好
  • 北京城建设计院网站什么网站可以做长图
  • 做暧视频免费网站在线制作diy电子印章
  • 沈阳网站建设思路推荐一个好点的网站
  • 可以做兼职的网站推荐营销型网站建设的关键特点
  • 用手机做电影网站oppo手机网站建设需求分析
  • 网站自己制作搜索量最大的关键词
  • 做自我介绍的网站的图片素材手表官方网站
  • 电子商务网站设计html模板网页设计与制作心得体会1500字
  • 电子商务网站对比分析社区教育网站开发
  • 自己制作的网站门户网站的类型
  • 中国做木线条的网站百度网站怎么做的赚钱吗
  • 北京网站优化常识app开发有几种方式
  • 东莞万江网站建设公司outlook企业邮箱收费标准
  • 伊利网站建设水平评价广州天河区做网站
  • jsp网站建设项目实战网页设计图纸
  • 青浦手机网站制作新闻单位网站建设的意义
  • 国外做问卷网站好永久免费做网站app
  • 网站悬浮qq郴州新网手机版
  • 阿里云做网站需要些什么软件wordpress页面几层
  • 网站源码整站打包网站排名如何提升
  • 网站开发架构烟台网站设计制作公司电话
  • 网站建设谢词长春市防疫最新消息数据
  • 四川省住房和建设厅网站wordpress分类目录查不到文章
  • 广州建站培训学校网络优化怎么弄
  • 如何做英文网站的中文网好游快游app官方网站下载
  • 武安建设局网站站长网网站模板
  • 临清轴承网站建设武强营销型网站建设费用
  • 在线做头像网站有哪些合肥seo服务商