
mysql数据库表间的关系图可以通过navicat查看:
第一步:下载navicat打开;
第二步:点击navicat界面最右下角标注的按钮即可查看关系图。
最新的MySQLWorkbench已经完全包含了数据库建模与设计、数据库SQL开发和数据库管理与维护等功能。
Mysql数据库-----表
shqihoo2018-04-0708:20
1、定义:表(table)是数据库最基本的组成单元,数据库是用来存储数据的,数据库中有很多表,每一个表都是一个独立的单元,表也是一个结构化的文件,由行和列组成,行称为数据或记录,列称为字段,字段又包含:字段名称、字段类型、长度、约束。
2、创建表
(1)、语法格式:createtable表名称(字段名类型(长度)约束);
(2)、MySQL常用数据类型
VARCHAR:可变长度字符串(VARCHAR(3)表示存储的数据长度丌能超过3个字符长度)
CHAR:定长字符串(CHAR(3)表示存储的数据长度丌能超过3个字符长度)
INT:整数型(INT(3)表示最大可以存储999)
BIGINT:长整型(对应java程序中的long类型)
FLOAT:浮点型单精度(FLOAT(7,2)表示7个有效数字,2个有效小数位)
DOUBLE:浮点型双精度(DOUBLE(7,2)表示7个有效数字,2个有效小数位)
DATE:日期类型(实际开发中,常用字符串代替日期类型)
BLOB:二进制大对象BinaryLargeObject(专门存储、视频、声音等数据)
CLOB:字符型大对象CharacterLargeObject(可存储超大文本,可存储4G字符串)
VARCHAR与CHAR对比:
都是字符串
VARCHAR比较智能,可以根据实际的数据长度分配空间,比较节省空间;但在分配的时候需要相关判断,效率低。
CHAR不需要劢态分配空间,所以执行效率高,但是可能会导致空间浪费
若字段中的数据不具备伸缩性,建议采用CHAR类型存储
若字段中的数据具备很强的伸缩性,建议采用VARCHAR类型存储
数据库吧,你用什么数据库
mysql可以配合lucene做搜索引擎,还不够大可以用cluster一般你用like没问题,索引要做得好。
如果大家有异议,可以在后面补充。我会随时更新的。
现在大概列出如下:(望各位补充)
1数据库的设计
尽量把数据库设计的更小的占磁盘空间
1)尽可能使用更小的整数类型(mediumint就比int更合适)
2)尽可能的定义字段为notnull,除非这个字段需要null(这个规则只适合字段为KEY的情形)
3)如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char(CHAR总是比VARCHR快)
4)表的主索引应该尽可能的短这样的话每条纪录都有名字标志且更高效
5)只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。
(这条只适合MYISAM引擎的表,对于INNODB则在保存记录的时候关系不大,因为INNODB是以事务为基础的,如果想快速保存记录的话,特别是大批量的导入记录的时候)
6)所有数据都得在保存到数据库前进行处理。
7)所有字段都得有默认值。
8)在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。
(具体的表现为:MYISAM表的MERGE类型,以及MYISAM和INNODB通用的分区,详情见手册)
9)不会用到外键约束的地方尽量不要使用外键。
2系统的用途
1)及时的关闭对MYSQL的连接。
2)explain复杂的SQL语句。(这样能确定你的SELECT语句怎么优化最佳)
3)如果两个关联表要做比较话,做比较的字段必须类型和长度都一致(在数据庞大的时候建立INDEX)
4)LIMIT语句尽量要跟orderby或者distinct这样可以避免做一次fulltablescan
5)如果想要清空表的所有纪录,建议用truncatetabletablename而不是deletefromtablename
不过有一个问题,truncate不会在事务处理中回滚。因为她要调用createtable语句。
(TruncateTable语句先删除表然后再重建,这个是属于文件界别的,所以自然快N多)
这一点手册上有详细解释:
1329TRUNCATE语法
TRUNCATE[TABLE]tbl_name
TRUNCATETABLE用于完全清空一个表。从逻辑上说,该语句与用于删除所有行的DELETE语句等同,但是在有些情况下,两者在使用上有所不同。
对于InnoDB表,如果有需要引用表的外键限制,则TRUNCATETABLE被映射到DELETE上;否则使用快速删减(取消和重新创建表)。使用TRUNCATETABLE重新设置AUTO_INCREMENT计数器,设置时不考虑是否有外键限制。
对于其它存储引擎,在MySQL51中,TRUNCATETABLE与DELETEFROM有以下几处不同:
删减 *** 作会取消并重新创建表,这比一行一行的删除行要快很多。
删减 *** 作不能保证对事务是安全的;在进行事务处理和表锁定的过程中尝试进行删减,会发生错误。
被删除的行的数目没有被返回。
只要表定义文件tbl_namefrm是合法的,则可以使用TRUNCATETABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。即使对于MyISAM和InnoDB也是如此。MyISAM和InnoDB通常不再次使用序列值。
当被用于带分区的表时,TRUNCATETABLE会保留分区;即,数据和索引文件被取消并重新创建,同时分区定义(par)文件不受影响。
TRUNCATETABLE是在MySQL中采用的一个OracleSQL扩展。
}
6)能使用STOREPROCEDURE或者USERFUNCTION的时候(ROUTINE总是减少了服务器端的开销)
7)在一条insert语句中采用多重纪录插入格式而且使用loaddatainfile来导入大量数据,这比单纯的indert快好多(在MYSQL中具体表现为:INSERTINTOTABLEQVALUES(),(),();)
(还有就是在MYISAM表中插入大量记录的时候先禁用到KEYS后面再建立KEYS,具体表现语句:
ALTERTABLETABLE1DISABLEKEYS;ALTERTABLETABLE1ENABLEKEYS;
而对于INNNODB表在插入前先setautocommit=0;完了后:setautocommit=1;这样效率比较高。)
8)经常OPTIMIZETABLE来整理碎片
9)还有就是date类型的数据如果频繁要做比较的话尽量保存在unsignedint类型比较快。
3系统的瓶颈
1)磁盘搜索
并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间
2)磁盘读写(IO)
可以从多个媒介中并行的读取数据。
3)CPU周期
数据存放在主内存中这样就得增加CPU的个数来处理这些数据。
4)内存带宽
当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈
以上就是关于mysql数据库表间关系图怎么查看(数据库表与表之间的关系图)全部的内容,包括:mysql数据库表间关系图怎么查看(数据库表与表之间的关系图)、千万量级数据库设计能力是指什么、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)