mysql 总结一 * 区别 索引 视图 存储

Mysql中有哪几种锁?html

1.表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的几率最高,并发度最低。mysql

2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的几率最低,并发度也最高。sql

3.页面锁:开销和加锁时尚界于表锁和行锁之间,并发度通常。数据库

 

mysql中有哪些不一样的表格? 5种缓存

myisam、Heap、merge、innodb、isam安全

 

 

MYISAM和Innodb区别服务器

myisam表引擎:并发

1.  5.1版本前,myisam是默认的存储引擎。memcached

2. 支持全文索引,压缩空间函数。模块化

3.不支持事务,可是每次查询都是原子的;不支持行锁,不支持外键,不支持崩溃后的安全恢复;

4.支持表锁,即每次操做是对整个表加锁;

5.每一个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。

6.用户在操做myisam表时,select,update,delete,insert语句都会给表自动加锁,若是加锁之后的表知足insert并发的状况下,能够在表的尾部插入新的数据。也能够经过lock table命令来锁表,这样操做主要是能够模仿事务,可是消耗很是大,通常只在实验演示中使用。

7.存储表的总行数;

8.采用非汇集索引,索引文件的数据域存储指向数据文件的指针。副索引与主索引基本一致,可是副索引不用保证惟一性。

 

Innodb表引擎:

1.默认事务引擎,最重要最普遍的存储引擎,性能很是优秀;

2.支持ACID的事务,支持事务的四种隔离级别;

3.支持行锁以及外键约束,所以能够支持写并发,采用MVCC多版本控制,来支持高并发;

4.不存储总行数;

5.全部的表都保存在同一个数据文件中(也多是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操做系统文件的大小,通常为2GB。

5.一个innodb引擎存储在一个文件空间(共享空间,表大小不受操做系统控制,一个表能够分布在多个文件里),也有可能为多个(设置为独立表空间,表大小受操做系统文件大小限制,通常为2G),受操做系统文件大小的限制。能够配置文件分开。

6.对主键查询的性能高于其余类型的存储引擎;主键索引采用聚簇索引(索引的数据域存储数据文件自己),副索引的数据域存储主键的值;所以从副索引查找数据,须要先经过副索引找到主键值,再访问副索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

7.内部作了不少优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区。

8.经过一些机制和工具支持真正的热备份。

9.支持崩溃后的安全恢复。

10.不支持全文索引;innodb聚簇索引比myisam非聚簇索引 快。

 

mysql中Innodb支持的四种事务隔离级别名称,以及逐级之间的区别?

sql标准定义的四个隔离级别:

1. read uncommited 读到未提交数据

2. read committed 脏读 ,不可重复读

3. repeatable read 可重复读 默认

4. serializable 串行事务

 

char 和 varchar的区别?

1.char 和 varchar 类型在存储和检索方面有所不一样。

2.char列长度固定为建立表时声明的长度,长度值范围是1到255. (定长,根据定义的字符串长度分配足够的空间)

3.当char值被存储时,它们被用空格填充到特定长度,检索char值时需删除尾随空格。

4.适合存储很短的字符串,或者全部值都接近同一个长度。

5.char长度 超出设定的长度会被截断。

6.对于常常变动的数据,char比varchar更好,char不容易产生碎片。

对于很是短的列,char比varchar在存储空间上更有效率,只分配真正须要的空间,更长的列会消耗更多的内存。

 

主键和候选键有什么区别?

表格的每一行都由主键惟一标识,一个表只有一个主键。

主键也是候选键。按照惯例,候选键能够被指定为主键,而且能够用于任何外键引用。

 

表格定义的全部索引?

索引是经过如下方式为表格定义的: show index from <tablename>;

 

like声明中的 % 和 _  是什么意思?

%对应于0个或更多字符, _  只是like语句中的一个字符。 

 

如何在unix和mysql时间戳之间进行转换?

UNIX_TIMESTAMP是从mysql时间戳转换为unix时间戳的命令。

FROM_UNIXTIME是从时间戳转换为mysql时间戳的命令。

 

列对比运算符是什么?

在SELECT语句的列比较中使用 =,<>,<=,<,>=,>,<<,>>,<=>,AND,OR或like运算符。

 

BLOB和TEXT有什么区别?

1.尽可能避免使用BLOB/text类型,查询会使用临时表,致使严重的性能开销。

2.BLOB是一个二进制对象,能够容纳可变数量的数据。 TEXT是一个不区分大小写的BLOB。

3.BLOB和TEXT类型之间的惟一区别在于对BLOB值进行排序和比较时,区分大小写,对TEXT值不区分大小写。

 

mysql_fetch_array 和 mysql_fetch_object 和 mysql_fetch_rows的区别是什么?

mysql_fetch_array()  将结果行做为关联数据或来自数据库的常规数据返回。

mysql_fetch_objetc()  从数据库返回结果行做为对象。

 

mysql 如何优化DISTINCT?  distinct

distinct在全部列上转换为group by,并与order by子句结合使用。

 

可使用多少列建立索引?

最多能够建立16个索引列。

 

若是一个表有一列定义为TIMESTAMP,将发生什么?

每当行被更改时,时间戳字段将获取当前时间戳。

 

列设置为AUTO_INCREMENT时,若是在表中达到最大值,会发生什么状况?

会中止递增,任何进一步的插入都将产生错误,由于密钥已被使用。

 

怎样才能找出最后一次插入时分配了哪一个自动增量?

LAST_INSERT_ID将返回由AUTO_INCREMENT分配的最后一个值,而且不须要指定表名称。

 

NOW() 和 CURRENT_DATE() 由什么区别?

NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。

CURRENT_DATE() 仅显示当前年份,月份和日期。

 

什么是非标准字符串类型?

1.TINYTEXT

2.TEXT

3.MEDIUMTEXT

4.LONGTEXT

 

什么是通用SQL函数?

1.CONCATAT(A,B)  链接两个字符串值以建立单个字符串输出。一般用于将两个或多个字段合并为一个字段。

2.FORMAT(X,D)  格式化数字X到D有效数字。

3.CURRDATE(), CURRTIME()  返回当前日期或时间

4.NOW()  将当前日期和时间做为一个值返回。

5.MONTH(), DAY(), YEAR(), WEEK(), WEEKDAY()  从日期值中提取给定数据。

6.HOUR(), MINUTE(), SECOND()   从时间值中提取给定数据。

7.DATEDIFF(A,B)  肯定两个日期之间的差别,一般用于计算年龄。

8.SUBTIMES(A,B)   肯定两次之间的差别。

9.FEOMDAYS(INT)   将整数天数转换为日期值。

 

mysql支持事务吗?

在缺省模式下,mysql是autocommit模式的,全部的数据库更新操做都会及时提交,因此在缺省状况下,mysql是不支持事务的。

可是若是你的mysql表类型是使用innodb tables 或BDB tables的话,你的mysql就可使用事务处理,使用set autocommit模式,在非autocommit模式下,你必须使用commit来提交你的更改,或者用rollback来回滚你的更改。

 

mysql里记录货币用什么字段类型好?

NUMERIC和DECIMAL类型被mysql实现为一样的类型,这在SQL92标准容许。他们被用于保存值,该值的准确精度是极其重要的值,

例如与金钱有关数据。当声明一个类是这些类型之一时,精度和规模的能被(而且一般是)指定。

例如:salary  decimal(9,2);

在这个例子中,9(precision)表明将被用于存储值的总得小数位数,而2(scale)表明将被用于存储小数点后的位数。

所以,在这种状况下,能被存储在salary列中的值得范围是从-9999999.99到9999999.99.

 

mysql有关权限的表有哪几个?

mysql服务器经过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。

 

列的字符串类型能够是什么?

set    blob  enum   char   text

mysql数据库作发布系统的存储,数据量增大的状况,怎么优化?

1.设计良好的数据库结构,容许部分数据冗余,尽可能避免join查询,提升效率。

2.选择合适的表字段数据类型和存储引擎,适当的添加索引。

3.mysql库主从读写分离。

4.找规律分表,减小单表中的数据量提升查询速度。

5.添加缓存机制,好比memcached,apc等。

6.不常常改动的页面,生成静态页面。

7.书写高效率的sql.

 

锁的优化策略:

1.读写分离

2.分段加锁

3.减小锁持有的时间

4.多个线程尽可能以相同的顺序去获取资源。

不能将锁的粒度过于细化,否则可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。

 

索引的底层实现原理和优化:

B+树    通过优化的B+树

主要是在全部的叶子结点中增长了指向下一个叶子节点的指针,所以innodb 建议为大部分表使用默认自增的主键做为主索引。

 

什么状况下设置了索引但没法使用:

1.以 % 开头的like语句,模糊匹配; int 类型 like 不匹配。

2. or语句先后没有同时使用索引。

3.数据类型出现隐士转化(如varchar不加单引号的话可能会自动转换为int型)。

4.不等于 或 not  null 

 

实践中如何优化mysql:

1.sql 语句以及索引的优化。

2.数据库表结构的优化。

3.系统配置的优化。

4.硬件的优化。

 

优化数据库的方法:

1.选取最适用的字段属性,尽量减小定义字段宽度,尽可能把字段设置not null,例如 省份、性别 最好适应enum.

2.使用链接join来代替子查询。

3.适用联合union来代替手动建立的临时表

4.事务处理

5.锁定表、优化事务处理

6.使用外键,优化锁定表

7.创建索引。

8.优化查询语句

 

简单描述mysql中,索引 ,主键,惟一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?

索引是一种特殊的文件(innodb数据表上的索引是表空间的一个组成部分),它们包含着对数据表里全部记录的引用指针。

普通索引(由关键字key或index定义的索引)的惟一任务是加快对数据的访问速度。

 

普通索引容许被索引的数据列包含重复的值,若是能肯定某个数据列将只包含彼此各不相同的值,在为这个数据列建立索引的时候就应该用关键字unique把它定义为一个惟一索引。也就是说,惟一索引能够保证数据记录的惟一性。

 

主键:是一种特殊的惟一索引,在一张表中只能定义一个主键索引,主键用于惟一标识一条记录,使用关键字primary key来建立。

 

索引能够覆盖多个数据列,如像index(columnA,columnB)索引,这就是联合索引。

 

索引能够极大的提升数据的查询速度,可是会下降插入、删除、更新表的速度,由于在执行这些写操做时,还要操做索引文件。

 

数据库中的事务是什么?

事务(transaction)是做为一个单元的一组有序的数据库操做。若是组中的全部操做都成功,则认为事务成功,即便只有一个操做失败,事务也不成功。若是全部操做完成,事务则提交,其修改将做用于全部其余数据库进程。若是一个操做失败,则事务将回滚,该事务全部操做的影响都将取消。

 

事务特性:

1.原子性:即不可分割性,事务要么所有被执行,要么就所有不被执行。

2.一致性或可串行:事务的执行使得数据库从一种正确状态转换成另外一种正确状态。

3.隔离性:在事务正确提交以前,不容许把该事务对数据的任何改变提供任何其余事务。

4.持久性:事务正确提交后,其结果将永久保存在数据库中,即便在事务提交后有了其余故障,事务的处理结果也会获得保存。

事务就是被绑定在一块儿做为一个逻辑工做单元的SQL语句分组,若是任何一个语句操做失败那么整个操做就被失败,之后操做就会回滚到操做前状态,或者有个节点。为了确保要么执行,要么不执行,就可使用事务。要将有组语句做为事务考虑,就须要经过ACID测试,即原子性、一致性、隔离性、持久性。

 

SQL注入漏洞产生的缘由?如何防止?

缘由:程序开发过程当中不注意规范书写sql语句和对特殊字符进行过滤,致使客户端能够经过全局变量POST和GET提交一些sql语句正常执行。

防止:开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置。

执行sql语句时使用addslashes进行sql语句转换。sql语句书写尽可能不要省略双引号和单引号。

过滤掉sql语句中的一些关键词:update、select、insert、delete、*.

提升数据库表和字段的命名技巧,对一些重复的字段类型程序的特色命名,取不易被猜到的。

为表中字段选择合适的数据类型

优先级:int >date,time>enum,char>varchar>blob,text

优先考虑数字类型,其次是日期或二进制类型,最后是字符串类型。同级别得数据类型,应优先选择占用空间小的数据类型。

 

存储时期

datatime : 以 YYYY-MM-DD HH:MM:SS 格式存储日期时间,精确到秒,占用8个字节的存储空间;存储于时区无关。

timestamp:以时间戳格式存储,占用4个字节,范围小1970-1-1到2038-1-19,显示依赖于所指定的时区,默认在第一列行的数据修改时能够自动得修改timestamp列得值。

date:(生日)占用的字节数比使用字符串、datatime、int存储要少,使用date只须要3个字节,存储日期月份,还能够利用日期时间函数进行日期得计算。

time:存储时间部分的数据

注意:不要使用字符串类型来存储日期时间数据(一般比字符串占用的存储空间小,在进行查找过滤能够利用日期函数)

使用int存储日期时间不如使用timestamp类型

 

对于关系型数据库而言,索引是至关重要的。回答有关索引的几个问题?

1.索引的目的是什么?

快速访问数据表中的特定数据,提升查询速度;下降写操做速度,占用磁盘空间。(减小服务器须要扫描的数据量)

帮助服务器避免排序和临时表;

将随机I/O 变为顺序I/O;

建立惟一索引,保证数据库表中每一行数据的惟一性。能够为NULL。 (不能not null,不能有默认值)

加速表和表之间的链接。

使用分组和排序子句进行数据检索时,能够显著减小查询中分组和排序的时间。

2.索引对数据库系统的负面影响是什么?

负面:

 建立索引和维护索引须要耗费时间,这个时间随着数据量的增长而增长;索引须要占用物理空间,不光是表须要占用数据空间,每一个索引也须要占用物理空间;

当对表进行增删改查的时候,索引也要动态维护,这样就下降了数据的维护速度。

3.为数据表创建索引的原则有哪些?

在最频繁使用的、用以缩小查询范围的字段上创建索引。where 条件 或 on 关联表查询的 关联列

在频繁使用的。须要排序的字段上创建索引。

4.什么状况下不宜创建索引?

对于查询中不多涉及的列或重复值比较多的列,不宜创建索引。

对于一些特殊的数据类型,不宜创建索引,好比文本字段(text)等。

 

解释mysql外连接、内链接与自链接的区别?

交叉链接:又叫笛卡尔积,它是指不使用任何条件,直接将一个表的全部记录和另外一个表中的全部记录一一匹配。

内链接:是只有条件的交叉链接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出如今结果集中,即内链接只链接匹配的行。

外连接:其结果集中不包含符合链接条件的行,并且会包括左表、右表或两个表的全部数据行,这三种状况依次称为左外链接、右外链接和全外链接。

左外链接:也称左链接,左表为主表,左表中的全部记录都会出如今结果集中,对于那些在右表中并无匹配的记录,扔显示,右表对应的那些字段值以NULL来填充。

右外链接:也称右链接,右表为主表。与左链接相反。mysql目前不支持全外链接。

 

mysql中事务回滚机制概述?

事务是用户定义的一个数据库操做序列,这些操做要么全作要么所有不作,是一个不可分割的工做单位,事务回滚是指将该事务已经完成的对数据库的更新操做撤销。

 

要同时修改数据库中两个不一样表时,若是他们不是一个事务的话,当第一个表修改完,可能第二个表修改过程当中出现了异常而没能修改,此时就只有第二个表依旧是未修改以前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二个表修改出现异常而没有被修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

 

SQL语言包含哪几部分?每部分都有哪些操做关键字?

sql语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。

数据定义:CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE/DROP INDEX.

数据操纵:select insert  update delete

数据控制:grant  revoke

数据查询:select

 

完整性约束包括哪些?

数据完整性(data integrity)是指数据的精确(accuracy)和可靠性(reliability)。

分为如下四类:

1》实体完整性:规定表的每一行在表中是惟一的实体。

2》域完整性:是指表中的列必须知足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

3》参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无心义的数据在数据库中扩散。

4》用户定义的完整性:不用的关系数据库系统根据其应用环境的不一样,每每还须要一些特殊的约束条件。用户定义的完整性便是针对某个特定关系数据库的约束条件,他反应某一具体应用必须知足的语义要求。

与表有关的约束:包括列约束(not null 非空约束)和表约束(primary key、foreign key、check、unique)

什么是锁?

数据库是一个多用户使用的共享资源。当多个用户并发的存取数据时,在数据库中就会产生多个事务同时存取同一数据的状况。若对并发操做不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个很是重要的技术。当事务在对某个数据对象进行操做前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了必定的控制,在该事务释放锁以前,其余的事务不能对此数据对象进行更新操做。

 

基本锁类型:锁包括行级锁和表级锁。

什么叫视图?游标是什么?

视图是一种虚拟的表,具备和物理表相同的功能。能够对视图进行增改查操做,视图一般是有一个表或多个表的行或列的子集。对视图的修改不影响基本表。它使得咱们获取数据更容易,相比多表查询。

游标:是对查询处来的结果做为一个单元来有效的处理。游标能够定在该单元中的特定行,从结果集的当前行检索一行或多行。能够对结果集当前行作修改。通常不使用游标,可是须要逐条处理数据的时候,游标显得十分重要。

什么是存储过程?用什么来调用?

存储过程是一个预编译的sql语句,有点事容许模块化设计,就是说只需建立一次,之后在该程序中就能够调用屡次。若是某次操做须要执行屡次sql,使用存储过程比单纯sql语句执行要快。能够用一个命令对象来调用存储过程。

 

如何通俗的理解三个范式?

第一范式:对属性的原子性约束,要求属性具备原子性,不可再分解;

第二范式:对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:对字段冗余性的约束,即任何字段不能由其余字段派生出来,它要求字段没有冗余 。

 

范式设计优缺点:

优势:能够尽可能的减小数据冗余,使得更新快,体积小

缺点:对于查询须要多个表进行关联,减小写的效率,增长读的效率,更难进行索引优化。

 

反范式化:

优势:能够减小表的关联,能够更好的进行索引优化。

缺点:数据冗余以及数据异常,数据得修改须要更多的成本。

什么是基本表?什么是视图?

基本表是自己独立存在的表,在sql中一个关系对应一个表。视图是从一个或几个基本表处处的表。视图自己不独立存储在数据库中,是一个虚表。

试述视图的优势?

1.视图可以简化用户的操做。

2.视图使用户能以多种角度看待同一数据。

3.视图为数据库提供了必定程度的逻辑独立性。

4.视图可以对机密数据提供安全保护。

 

NULL是什么意思?

NULL这个值表示UNKNOWN(未知),它不表示“”(空字符串)。对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个NULL值进行比较,并在逻辑上但愿得到一个答案。

使用IS NULL来进行NULL判断。

 

主键、外键和索引的区别?

主键  :惟一标识一条记录,不能有重复的,不容许为空。

外键:表的外键是另外一表的主键,外键能够有重复的,能够是空值。

索引:该字段没有重复值,但能够有一个空值。

做用:

主键:用来保证数据完整性。

外键:用来和其余表创建联系用的。

索引:提升查询排序的速度。

个数:

主键 :主键一个表只有一个

外键:一个表能够有多个外键

索引:一个表能够有多个惟一索引

 

你能够用什么来确保表格里的字段只接受特定范围的值?

check限制,它在数据库表格里被定义,用来限制输入该列的值。

触发器也能够被用来限制数据库表格里的字段可以接受的值,可是这种办法要求触发器在表格里被定义,这可能会在某些状况下影响到性能。

 

说说对SQL语句优化有哪些方法?

1.where子句中:where表之间的链接必须写在其余where条件以前,那些能够过滤掉最大数据记录的条件必须写在where子句的末尾,having最后。

2.用exists替代in 、用not exists 替代not in.

3.避免在索引列上使用计算。

4.避免在索引列上使用is null 和is not null

5.对查询进行优化,应尽可能避免全表扫描,首先应考虑在where以及order by 涉及的列上创建索引。

6.应尽可能避免在where子句中对字段进行null 值判断,不然将致使引擎放弃使用索引而进行全表扫描。

7.应尽可能避免在where子句中对字段进行表达式操做,这将致使引擎放弃使用索引而进行全表扫描。

 

复合索引的优势和注意事项

 

概念:
    单一索引是指索引列为一列的状况,即新建索引的语句只实施在一列上;
    用户能够在多个列上创建索引,这种索引叫作复合索引(组合索引);
    复合索引在数据库操做期间所需的开销更小,能够代替多个单一索引;
    同时有两个概念叫作窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;
    设计索引的一个重要原则就是能用窄索引不用宽索引,由于窄索引每每比组合索引更有效;

使用:
    建立索引
    create index idx1 on table1(col1,col2,col3)
    查询
    select * from table1 where col1= A and col2= B and col3 = C
    这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,由于索引中有这些数据,这叫覆盖式查询,这样的查询速度很是快;

注意事项:
    一、对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高;
    select * from table1 where col1=A AND col2=B AND col3=D
    若是使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引

    二、什么时候是用复合索引
    根据where条件建索引是极其重要的一个原则;
    注意不要过多用索引,不然对表更新的效率有很大的影响,由于在操做表的时候要化大量时间花在建立索引中

    三、复合索引会替代单一索引么
    若是索引知足窄索引的状况下能够创建复合索引,这样能够节约空间和时间


备注:
    对一张表来讲,若是有一个复合索引 on (col1,col2),就没有必要同时创建一个单索引 on col1;
    若是查询条件须要,能够在已有单索引 on col1的状况下,添加复合索引on (col1,col2),对于效率有必定的提升
    同时创建多字段(包含五、6个字段)的复合索引没有特别多的好处,相对而言,创建多个窄字段(仅包含一个,或顶多2个字段)的索引能够达到更好的效率和灵活性。

 

 

表引擎  字符集

表字段 名称 类型 长度 字符集 默认值 注释 

一、        剔除关系不密切的字段

二、        字段命名要有规则及相对应的含义(不要一部分英文,一部分拼音,还有相似a.b.c这样不明含义的字段)

三、        字段命名尽可能不要使用缩写(大多数缩写都不能明确字段含义)

四、        字段不要大小写混用(想要具备可读性,多个英文单词可以使用下划线形式链接)

五、        字段名不要使用保留字或者关键字

六、        保持字段名和类型的一致性

七、        慎重选择数字类型

八、        给文本字段留足余量

  表结构合理性配置

一、        多型字段的处理

就是表中是否存在字段可以分解成更小独立的几部分(例如:人能够分为男人和女人)

二、        多值字段的处理

能够将表分为三张表

这样使得检索和排序更加有调理,且保证数据的完整性!

其它建议

一、        对于大数据字段,独立表进行存储,以便影响性能(例如:简介字段)

二、        使用varchar类型代替char,由于varchar会动态分配长度,char指定长度是固定的。

三、        给表建立主键,对于没有主键的表,在查询和索引定义上有必定的影响。

四、        避免表字段运行为null,建议设置默认值(例如:int类型设置默认值为0)在索引查询上,效率立显!

五、        创建索引,最好创建在惟一和非空的字段上,创建太多的索引对后期插入、更新都存在必定的影响(考虑实际状况来建立)。

CREATE TABLE `user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `username` char(30) NOT NULL DEFAULT '' COMMENT '用户名',  `realname` char(30) NOT NULL DEFAULT '' COMMENT '真实姓名',  `idcard` char(50) NOT NULL DEFAULT '' COMMENT '身份证号码',  `mobile` char(15) NOT NULL DEFAULT '' COMMENT '手机号',  `level` char(5) DEFAULT '' COMMENT '证书等级 s1-s8',  `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '认证状态 1未认证 2 已认证',  `operate_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '操做人id',  `create_time` int(10) unsigned DEFAULT '0' COMMENT '建立时间',  `update_time` int(10) unsigned DEFAULT '0' COMMENT '修改时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

相关文章
相关标签/搜索