MySQL实战积累

时间:2021-11-12 10:02:19

1.mysql两种主流存储引擎:Innodb引擎、MyIASM引擎

应用场景:

InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB

MyIASM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyIASM

   mysql部分系统表采用MyIASM存储引擎

2.通过事物批量插入数据

List<string> sqlList = new List<string>();
string sql = "Insert/Delete/Update ...";
sqlList.Add(sql);//此处拼接增删改语句,通过事物一次提交
MySqlDBHelper.ExecuteTransaction(sqlList);

 3.LOCK TABLE  表名  READ/WRITE      UNLOCK TABLES

4.索引

索引是表的索引目录,在查找内容之前先查目录中查找索引位置,从而快速定位查询数据;可以理解成新华字典中的索引;索引会保存在额外的文件中。

一般的索引种类及功能:

普通索引:仅加速查询

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null)

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,进行搜索

索引合并:使用多个单列索引组合查询搜索

覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

http://www.cnblogs.com/lyhabc/p/3691555.html

对已有表添加索引

第一种语法:
CREATE 索引类型 索引名 ON 表名 (字段名)
第二种语法:
ALTER TABLE 表名 ADD 索引类型 索引名 (字段名) 示例:
CREATE INDEX index_emp_name on emp1(name);
ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num);

删除索引

语法:
DROP INDEX 索引名 on 表名
DROP INDEX index_emp_name on emp1;
DROP INDEX bank_num on emp2;

5.show processlist

MySQL实战积累

 6.复制表的内容

create table emp_bak (select * from emp)

7.查询的顺序如下

FROM  ,ON ,  WHERE, SELECT ,  GROUP  BY ,  ORDER BY   ,HAVING

8.mysql最大连接数

查看最大连接数

show variables like '%max_connections%';

第一种修改最大连接数(这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。)

set GLOBAL max_connections = 200;

第二种通过修改配置文件来修改mysql最大连接数(max_connections)。

这种方式说来很简单,只要修改MySQL配置文件my.ini 或 my.cnf的参数max_connections,将其改为max_connections=1000,然后重启MySQL即可。

9.把password_expired 改成不过期

update user set password_expired='N' where user='root';
flush privileges;
quit

10.巧用CAS解决数据一致性问题

高并发“查询并修改”的场景,可以用CAS(Compare and Set)的方式解决数据一致性问题。对应到业务,即在set的时候,加上初始条件的比对。

并发操作发生时:

业务1执行 => UPDAtE t_yue SET money=28 WHERE uid=$uid AND money=100

业务2执行 => UPDAtE t_yue SET money=38 WHERE uid=$uid AND money=100

11.表必备三字段: id, gmt_create, gmt_modified。

永远为每张表设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。就算是你 users表有一个主键叫 “email”的字段,你也别让它成为主键。使用 VARCHAR 类型来当主键会使用得性能下降。

12.解决修改datadir路径后无法启动问题

如果在Windows系统中datadir路径后无法启动问题,报错1067错误,可以使用下列方法解决:

在新创建的data文件夹上右键,选择“属性”->“安全”,在组和用户(G)中添加NETWORK SERVICE即可。

13.设计表时不允许空值

通过声明列“NOT NULL”来实现这一点

14.MySQL中lock tables和unlock tables浅析

15.使用join链接代替子查询