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[索引名](索引字段))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值