mysql 一张有近一百个字段的表,通过主键查询数据非常慢,查询一条数据需要2秒左右。怎么作优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 一张有近一百个字段的表,通过主键查询数据非常慢,查询一条数据需要2秒左右。怎么作优化相关的知识,希望对你有一定的参考价值。
已建立主键的索引,需要通过查询是否存在,再插入数据,一次性要插入几十万条数据需要几天!
单表查询,单表插入!
分成几个表不就完了
参考技术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秒左右。怎么作优化的主要内容,如果未能解决你的问题,请参考以下文章