MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
wangpugod2003
V2EX  ›  MySQL

SQL 查询和导入性能优化

  •  
  •   wangpugod2003 · Aug 3, 2016 · 3361 views
    This topic created in 3632 days ago, the information mentioned may be changed or developed.

    请教大家两个问题, mysql 中有两个表:

    1 )策略细则表,有三种策略, strategytype 为 1,2 或者 3 ,每种策略的 phonecode 等参数类型不一样: CREATE TABLE iptv_ipandphonecode ( codeid int(11) NOT NULL, regionname char(255) NOT NULL, areaname char(255) NOT NULL, strategytype int NOT NULL, codetype int NOT NULL, phonecode char(255) default '' NULL,/format : YYYY.MM.DD HH24:MI:SS/ startcode char(255) default '' NULL,/format : YYYY.MM.DD HH24:MI:SS/ endcode char(255) default '' NULL, upgradeflag int NOT NULL, remark char(255) default '' NULL, reserve1 int(11) default NULL, reserve2 char(255) default NULL, PRIMARY KEY (codeid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    策略表,用来存储当前是否配置了升级策略: CREATE TABLE iptv_strategyrelation ( strategyid int(11) NOT NULL, codeid int(11) NOT NULL, remark char(255) default NULL, reserve1 int(11) default NULL, reserve2 char(255) default NULL, PRIMARY KEY (strategyid,codeid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    每次当有一个升级请求过来时候,都需要执行如下三个 SQL 查询语句,分别用来判断上报的参数是否在 iptv_ipandphonecode 表中存在,如果存在就认为符合策略,否则认为不符合策略:

    select sb.codeid,sb.regionname,sb.strategytype,sb.codetype,sb.phonecode,sb.startcode,sb.endcode,sb.upgradeflag,sb.remark from iptv_ipandphonecode sb, iptv_strategyrelation sb2 where sb.codeid=sb2.codeid and sb.strategytype=3 and sb2.strategyid=?

    select sb.codeid,sb.regionname,sb.strategytype,sb.codetype,sb.phonecode,sb.startcode,sb.endcode,sb.upgradeflag,sb.remark from iptv_ipandphonecode sb, iptv_strategyrelation sb2 where sb.codeid=sb2.codeid and sb.strategytype=2 and sb2.strategyid=?

    select sb.codeid,sb.regionname,sb.strategytype,sb.codetype,sb.phonecode,sb.startcode,sb.endcode,sb.upgradeflag,sb.remark from iptv_ipandphonecode sb, iptv_strategyrelation sb2 where sb.codetype=3 and sb.codeid=sb2.codeid and sb.strategytype=1 and sb2.strategyid=?

    在表 iptv_ipandphonecode 中的数据有十万条的时候,表 2 的对应条数也很多,导致上面的 SQL 级联查询很慢,请问有优化的方法吗?是否能把上面的三种查询方式统一起来?或者别的办法?

    1. 另外,策略条数很多的时候,数据导入的时候也很慢,导入数据时,首先我是查询该条策略是否存在: select * from iptv_ipandphonecode where phonecode=? 然后再插入两张表: insert into iptv_ipandphonecode(codeid,regionname,areaname,strategytype," "codetype,phonecode,startcode,endcode,upgradeflag,remark)values(?,?,?,?,?,?,?,?,?,?)

    然后再导入第二张策略表: insert into iptv_strategyrelation(strategyid,codeid)values(?,?)

    这个导入有没优化的办法,谢谢!

    2 replies    2017-11-07 14:54:52 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       Aug 3, 2016 via iPhone
    导入用 load file in path ,比一条条插入快
    klaksvik
        2
    klaksvik  
       Nov 7, 2017
    @wangpugod2003 兄,PTE 考试 7 炸有经验么? OZing
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5432 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 08:17 · PVG 16:17 · LAX 01:17 · JFK 04:17
    ♥ Do have faith in what you're doing.