mysql创建表

MySQL大表优化方案

☆樱花仙子☆ 提交于 2020-01-14 10:54:46
当 MySQL 单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED VARCHAR的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用TIMESTAMP而非DATETIME, 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描 应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用UNIQUE,由程序保证约束 使用多列索引时主意顺序和查询条件保持一致

MySQL表相关

こ雲淡風輕ζ 提交于 2020-01-13 16:34:48
一、定义表 创建一个表: CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno)); 二、修改表: https://dev.mysql.com/doc/refman/8.0/en/alter-table.html 1.修改表中某一列的数据类型: 语法:ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name ] 例子:将student表的Sage列由smallint 类型改成int类型 alter table student change Sage Sage int; 注意:就算没有更改列名,也需要把原列名再写一遍。 来源: CSDN 作者: Desny 链接: https://blog.csdn.net/weixin_40908748/article/details/103957949

mysql 数据库分表小实例

*爱你&永不变心* 提交于 2020-01-11 23:32:17
项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分表,即将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法,让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。 我们可以进行简单的设想:现在有一个表products存储产品信息,现在有100万用户在线访问,就要进行至少100万次请求,现在我们如果将它分成100个表即products0~~products99,那么利用一定的算法我们就分担了单个表的访问压力,每个表只有1万个请求(当然,这是理想情况下!) 实现mysql 分表的关键在于:设计良好的算法来确定"什么时候情况下访问什么(哪个)表"。 下面我们先来实现一个简单的mysql分表演示:这里使用MERGE分表法 1,创建一个完整表存储着所有的成员信息 create table member( id bigint auto_increment primary key, name varchar(20), sex tinyint not null default '0' )engine=myisam default charset=utf8 auto_increment=1;

MySQL 创建表

≯℡__Kan透↙ 提交于 2020-01-11 15:59:14
MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] TEMPORARY:该关键字表示用MySQL create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用。 IF NOT EXISTS:实际上是在建表前加上一个判断,只有该表目前尚不存在时才执行create table操作。用此选项可以避免出现表已经存在无法再新建的错误。 tbl_name:你所要创建的表的表名。该表名必须符合标识符规则。通常的做法是在表名中仅使用字母、数字及下划线。例如titles、our_sales、my_user1等都应该算是比较规范的表名。 create_definition:这是MySQL create table语句中关键部分所在。在该部分具体定义了表中各列的属性。 create_definition的基本语句是: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY

MySQL 创建表

两盒软妹~` 提交于 2020-01-11 03:03:16
MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement] TEMPORARY:该关键字表示用MySQL create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,对于目前尚不支持存储过程的MySQL,该关键字一般不用。 IF NOT EXISTS:实际上是在建表前加上一个判断,只有该表目前尚不存在时才执行create table操作。用此选项可以避免出现表已经存在无法再新建的错误。 tbl_name:你所要创建的表的表名。该表名必须符合标识符规则。通常的做法是在表名中仅使用字母、数字及下划线。例如titles、our_sales、my_user1等都应该算是比较规范的表名。 create_definition:这是MySQL create table语句中关键部分所在。在该部分具体定义了表中各列的属性。 create_definition的基本语句是: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY

MySQL分区分表

[亡魂溺海] 提交于 2020-01-08 23:53:24
博文大纲: 1、为什么要分表? 2、MySQL分表 3、利用merge存储引擎实现分表 4、MySQL分区 1、为什么要分表? 数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询速度变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。当出现这种情况时,我们可以考虑分表或分区。 2、MySQL分表 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的表名,然后去操作它。 将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法(如用hash的方式,也可以用求余(取模)的方式),让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。分表的目的就在于此,减小数据库的负担,缩短查询时间。 Mysql分表分为垂直切分和水平切分,具体区别如下: 垂直切分 是指数据表列的拆分,把一张列比较多的表拆分为多张表

mysql 初级查询 双表查询

主宰稳场 提交于 2020-01-06 21:31:04
1.创建student CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表 CREATE TABLE score ( id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT , stu_id INT(10) NOT NULL , c_name VARCHAR(20) , grade INT(10) ); 2.为student表和score表增加记录 向student表插入记录的INSERT语句如下: INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区'); INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区'); INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市'); INSERT INTO student

MySQL中DQL的单表查询

左心房为你撑大大i 提交于 2020-01-03 05:02:41
-- 单表查询对应练习题 https://blog.csdn.net/ksaar_/article/details/103811410 -- 创建表 CREATE TABLE stu ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(32), age int(11), sex varchar(1), address varchar(20), math double(5, 2) NOT NULL DEFAULT 0.00, english double(5, 2) NOT NULL DEFAULT 0.00, PRIMARY KEY (id) ) AUTO_INCREMENT = 1; -- 添加数据 INSERT INTO `stu` VALUES (1, '浩诚', 35, '女', '阿富汗', 90.00, 30.00); INSERT INTO `stu` VALUES (2, '彭超', 20, '男', '阿富汗', 70.00, 60.00); INSERT INTO `stu` VALUES (3, '余旭', 20, '男', '阿富汗', 50.00, 30.00); INSERT INTO `stu` VALUES (4, '刘诚', 18, '女', '湖北', 90.00, 98.00); INSERT

kettle-8.3.0.0:MySQL级表关联

瘦欲@ 提交于 2020-01-01 13:05:02
目的 在数据库A中创建“用户表”、“商品表”、“订单表”,在数据库B中创建“订单详细信息表”。最终目标为根据用户表、商品表、订单表获取订单详细信息表,最终目标结果如下。 create database testA; use testA; -- 用户表 create table `user`( `id`int(10) primary key, `name` varchar(50), `age` int(3) )ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into user values(10001,'张三',20); insert into user values(10002,'李四',25); insert into user values(10003,'王五',22); -- 商品表 create table `goods`( `id`int(10) primary key, `name` varchar(50), `price` float(16) )ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into goods values(1000001,'苹果',6.5); insert into goods values(1000002,'橘子',2.5); insert into goods

数据库(MySQL)表基本操作

眉间皱痕 提交于 2020-01-01 05:55:44
数据库表基本操作 思前想后,最终还是把博客的名字改成了数据库表基本操作,以前叫SQL语句大全,感觉用“大全”这个名词太大了,而文章中介绍的内容有限而且也不深。如果您在阅读的过程中发现有不完善的地方,欢迎补充说明。 创建数据库    一提笔就讲创建数据库,感觉好像是从半道上开始的。创建数据库前总得安装数据库吧,不管是SQL Server、mysql、Oracle。但是如果这样写下去,不知道这篇博客还能不能完成,那就默认是安装好数据库了吧,本片博客如下都是使用mysql数据库,首先是登入数据库操作(mysql -u root -p)。 查看当前所存在的数据库: show databases; 查询结果中的mysql数据库是必须的,用来描述用户的访问权限;information_schema数据库提供了访问数据库元数据的方式,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等;performance_schema用于收集数据库服务器性能参数。 创建新的数据库: create database test_db; test_db为要创建的数据库名称,该名称不能与现有的数据库重名。 查看创建好的数据库定义:show create database test_db; 删除数据库: drop database test_db; test