zoukankan      html  css  js  c++  java
  • 优化MYSQL数据库的方法

    1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM
    2、使用连接(JOIN)来代替子查询:
    a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOTin(SELECT customerid FROM orderinfo)
    b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOTin(SELECT customerid FROM orderinfo)
    c.提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderidcustomerinfo.customerid=orderinfo.customerid
    WHERE orderinfo.customerid IS NULL
    3、使用联合(UNION)来代替手动创建的临时表
    a.创建临时表:SELECT name FROM `nametest` UNION SELECTusername FROM `nametest2`
    4、事务处理:
    a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
    mysql_query("BEGIN");
    mysql_query("INSERT INTOcustomerinfo (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 TABLEcustomerinfo READ, orderinfo WRITE");
    mysql_query("SELECT customeridFROM `customerinfo` where id=".$id);
    mysql_query("UPDATE `orderinfo`SET ordertitle='$title' where customerid=".$id);
    mysql_query("UNLOCKTABLES");
    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,
    PRIMARYKEY(customerid,orderid),
    FOREIGN KEY (customerid)REFERENCES customerinfo
    (customerid) ON DELETECASCADE
    )TYPE = INNODB;
    注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
    表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
    7、建立索引:
    a.格式:
    (普通索引)->
    创建:CREATE INDEX <索引名> ON tablename (索引字段)
    修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
    创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
    (唯一索引)->
    创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
    修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
    创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
    (主键)->
    它是唯一索引,一般在创建表是建立,格式为:
    CREATA TABLE tablename([...],PRIMARY KEY[索引字段])
    8、优化查询语句
    a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
    例子1:
    SELECT * FROM order WHEREYEAR(orderDate)<2008;(慢)
    SELECT * FROM order WHEREorderDate<"2008-01-01";(快)
    例子2:
    SELECT * FROM order WHEREaddtime/7<24;(慢)
    SELECT * FROM order WHEREaddtime<24*7;(快)
    例子3:
    SELECT * FROM order WHERE title like"%good%";
    SELECT * FROM order WHEREtitle>="good" and name<"good";


    作者:狂流
    出处:http://www.cnblogs.com/kuangliu/
    欢迎转载,分享快乐! 如果觉得这篇文章对你有用,请抖抖小手,推荐一下!

  • 相关阅读:
    [APM] OneAPM 云监控部署与试用体验
    Elastic Stack 安装
    xBIM 综合使用案例与 ASP.NET MVC 集成(一)
    JQuery DataTables Selected Row
    力导向图Demo
    WPF ViewModelLocator
    Syncfusion SfDataGrid 导出Excel
    HTML Table to Json
    .net core 2.0 虚拟目录下载 Android Apk 等文件
    在BootStrap的modal中使用Select2
  • 原文地址:https://www.cnblogs.com/kuangliu/p/3462537.html
Copyright © 2011-2022 走看看