mysql 保证事物完整性_MySQL性能优化

1.选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置为 NOT NULL,例如‘省份,性别’,最好设置为ENUM。

2.使用连接(JOIN)来代替子查询:

a:删除没有任何订单的客户:DELETE  FROM  customerinfo  WHERE  customerid   NOT  in(SELECT  customerid  FROM  orderinfo);

b:提取所有没有订单的客户:SELECT  FROM  customerinfo  WHERE  customerid   NOT  in  (SELECT  customerid  FROM   orderinfo)   ;

提高b的优化速度:SELECT FROM   customerinfo  LEFT JOIN  orderinfo   customerinfo.customerid=orderinfo.customerid  WHERE   orderinfo.customerid  IS   NULL

3.使用联合(UNION)来代替手动创建的临时表

a.创建临时表:SELECT   name   FROM  'nametest'  UNION  SELECT  username   FROM  'nametest2'

4.事物处理

a:保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败则都失败。

mysql_query(" BEGIN");

mysql_query("INSERT INTO customerinfo(name) VALUES ('$name1')");

mysql_query("SELECT *  FROM `orderinfo` WHERE  customerid=$id");

mysql_query("COMMIT");

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

a:我们使用一个SELECT语气取出初始数据,通过一些计算,用UPDATE语句将新值更新到表中。包含有WRITE关键字的LOCK  TABLE语句可以保证在UNLOCK  TABLES 命令被执行之前。不会有其他的访问来对inventory进行插入,更新或者删除的操作。

mysql_query("LOCK  TABLE  customerid   READ,orderinfo  WRITE");

mysql_query("SELECT  customerid FROM 'customerinfo' WHERE id ="".$id);

mysql_query('UPDATE 'orderinfo' SET ordertitle='$title' WHERE customerid=".$id);

mysql_query("UNLOCK TABLES");

6.使用外键优化锁定表

a:把customerinfo里的customerid映射到orderinfo里的customerid里

任何一条没有合法的customerid的记录不会写到orderinfo里

CREATE  TABLE customerinfo(

customerid  INT  NOT NULL,

PRIMARY  KEY(customerid)

)   TYPE=INNODB;

CREATE  TABLE orderinfo(

orderid   INT NOT NULL,

customerid  INT NOT NULL,

PRIMARY(customerid, orderid),

FOREIGN  customerid  REFERENCES customerinfo(customerid)  ON DELETE  CASCADE

) TYPE=INNODB;

注意:‘ON DELETE  CASCADE’该参数保证当customerinfo表中的一条记录删除的话同时也会删除orderinfo表中的该用户所有记录,注意定义外键要定义事务安全类型为INNODB.

7.建立索引

a.格式:

普通索引:

创建:CREATE  INDEX    ON  tablename(索引字段)

修改:ALTER  TABLE  tablename  ADD  INDEX[索引名](索引字段)

创表指定索引:CREATE   TABLE  tablename([...],INDEX[索引名](索引字段))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值