mysql 一张有近一百个字段的表,通过主键查询数据非常慢,查询一条数据需要2秒左右。怎么作优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 一张有近一百个字段的表,通过主键查询数据非常慢,查询一条数据需要2秒左右。怎么作优化相关的知识,希望对你有一定的参考价值。

已建立主键的索引,需要通过查询是否存在,再插入数据,一次性要插入几十万条数据需要几天!
单表查询,单表插入!

1张表100个字段。。。。分表,然后用表外连接查询可以调高查询效率,也可以用复合查询,不过复合查询效率没有外连接查询效率高,但是sql语句写起来方便。如果数据量不是上百万级别的,推荐用复合查询。 参考技术A 就是,干吗整一百多字段。。。简直扯淡追答

分成几个表不就完了

参考技术B 个人认为可以从以下几方面来考虑:
1、作为关系型数据库,是什么原因出现了这种大表?是否可以做表拆分,减少单表字段数量,优化表结构。
2、明确当前表的数据量,这是影响查询速度的因素之一。
3、在保证主键有效的情况下,检查主键索引的字段顺序,使得查询语句中条件的字段顺序和主键索引的字段顺序保持一致。
4、在程序逻辑中采用手动事务控制,不要每插入一条数据就自动提交,而是定义一个计数器,进行批量手动提交,能够有效提高运行速度。
参考技术C 100多个字段的表,这表结构是谁设计的呢?真烂 参考技术D 水平分表,详细可看百度

mysql中的外键foreign key

一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。

  一张表中可以有多个外键。

  外键的默认作用有两点:

  1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。

  2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

  外键的定制作用----三种约束模式:

    district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

    cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

    set null:置空模式,前提外键字段允许为NLL,  父表操作后,子表对应的字段被置空。

  使用外键的前提:

  1. 表储存引擎必须是innodb,否则创建的外键无约束效果。

  2. 外键的列类型必须与父表的主键类型完全一致。

  3. 外键的名字不能重复。

  4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

二、新增外键

  1. 在创建时增加

   create table my_tab1(

   id int primary key auto_increment,

   name varchar(10) not null,

   class int,

   foreign key(class) references my_tab2;

   )charset utf8;

  2. 在创建好的表中增加

   alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);

三、删除外键

  alter table my_tab drop foreign key 外键名字;

以上是关于mysql 一张有近一百个字段的表,通过主键查询数据非常慢,查询一条数据需要2秒左右。怎么作优化的主要内容,如果未能解决你的问题,请参考以下文章

关于mysql分区与未分区速度和带有主键表分区的问题

在线等!!如何通过主表及其主键查询到与之关联的表及关联字段?数据库为db2

Mysql某个表有近千万数据,CRUD比较慢,如何优化?

MySQL 中的复合主键性能缺陷

Mysql 查询速度慢怎么办

mysql 索引