• SQL优化工具


    SQL优化工具

    什么是索引?

    • 打个比方,我们在使用MySQL用作查询的时候就好比查字典,索引就好比字典的偏旁部首页。如果没有索引我们查询一个文字就需要一页页的翻,显然这种方式效率很低。如果我们对某一字段加入了索引,就可以通过偏旁部首页查找这个文字,让查询变得更加高效。

    相关链接

    效果展示

    SELECT
    	ca_id,
    	sub_id,
    	ca_number,
    	sub_number
    FROM
    	tbl_category ca
    LEFT JOIN tbl_subcategory sub ON ca.ca_number = sub.sub_number
    

    • 使用SQL优化工具
    [root@localhost /]# /usr/sbin/sqladvisor -f /etc/sql.cnf -q "SELECT ca_id, sub_id, ca_number, sub_number FROM tbl_category ca LEFT JOIN tbl_subcategory sub ON ca.ca_number = sub.sub_number" -v 1
    
    2017-08-15 19:27:43 3494 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `ca_id` AS `ca_id`,`sub_id` AS `sub_id`,`ca_number` AS `ca_number`,`sub_number` AS `sub_number` from (`test`.`tbl_category` `ca` left join `test`.`tbl_subcategory` `sub` on((`ca`.`ca_number` = `sub`.`sub_number`))) 
    
    2017-08-15 19:27:43 3494 [Note] 第2步:开始解析join on条件:ca.ca_number=sub.sub_number 
    
    2017-08-15 19:27:43 3494 [Note] 第3步:开始选择驱动表,一共有1个候选驱动表 
    
    2017-08-15 19:27:43 3494 [Note] explain select * from tbl_category 
    
    2017-08-15 19:27:43 3494 [Note] 第4步:候选驱动表tbl_category的结果集行数为:29521 
    
    2017-08-15 19:27:43 3494 [Note] 第5步:选择表tbl_category为驱动表 
    
    2017-08-15 19:27:43 3494 [Note] 第6步:表tbl_category 的SQL太逆天,没有优化建议 
    
    2017-08-15 19:27:43 3494 [Note] 第7步:开始验证 字段sub_number是不是主键。表名:tbl_subcategory 
    
    2017-08-15 19:27:43 3494 [Note] show index from tbl_subcategory where Key_name = 'PRIMARY' and Column_name ='sub_number' and Seq_in_index = 1 
    
    2017-08-15 19:27:43 3494 [Note] 第8步:字段sub_number不是主键。表名:tbl_subcategory 
    
    2017-08-15 19:27:43 3494 [Note] 第9步:开始验证 字段sub_number是不是主键。表名:tbl_subcategory 
    
    2017-08-15 19:27:43 3494 [Note] show index from tbl_subcategory where Key_name = 'PRIMARY' and Column_name ='sub_number' and Seq_in_index = 1 
    
    2017-08-15 19:27:43 3494 [Note] 第10步:字段sub_number不是主键。表名:tbl_subcategory 
    
    2017-08-15 19:27:43 3494 [Note] 第11步:开始验证表中是否已存在相关索引。表名:tbl_subcategory, 字段名:sub_number, 在索引中的位置:1 
    
    2017-08-15 19:27:43 3494 [Note] show index from tbl_subcategory where Column_name ='sub_number' and Seq_in_index =1 
    
    2017-08-15 19:27:43 3494 [Note] 第12步:开始输出表tbl_subcategory索引优化建议: 
    
    2017-08-15 19:27:43 3494 [Note] Create_Index_SQL:alter table tbl_subcategory add index idx_sub_number(sub_number) 
    
    2017-08-15 19:27:43 3494 [Note] 第13步: 优化结束! 
    
    
    2017-08-15 19:27:43 3494 [Note]12步:开始输出表tbl_subcategory索引优化建议: 
    
    2017-08-15 19:27:43 3494 [Note] Create_Index_SQLalter table tbl_subcategory add index idx_sub_number(sub_number) 
    
    • 执行工具的索引优化建议

    alter table tbl_subcategory add index idx_sub_number(sub_number)

    • 执行sql语句(耗时0.05秒左右[linux系统下的测试])
    SELECT
    	ca_id,
    	sub_id,
    	ca_number,
    	sub_number
    FROM
    	tbl_category ca
    LEFT JOIN tbl_subcategory sub ON ca.ca_number = sub.sub_number
    


    详细链接 : http://wangweihong.com

  • 相关阅读:
    30天敏捷生活(4): 撰写个人使命宣言
    [智力考题]比尔盖茨只有3分的考题
    推荐下载:MSN机器人源代码(C#),含自动IP地址查询、简单自动问答等(添加详细使用)
    [代码]包括所有特性的目录选择对话框
    开源数据库系统之SQLite3.2.0、FireBird2.0 Alpha1等
    [建议]添加模板功能
    到底SQLite有多强?在我的2台机器上的压力测试
    OMEA Pro,刚刚荣获15届Jolt大奖,综合RSS阅读,邮件、任务等管理的IIM(智能信息管理)
    关于DotNetNuke(DNN)的语言问题
    写你自己的反编译/混淆器
  • 原文地址:https://www.cnblogs.com/winnie-wong/p/7471516.html
Copyright © 2020-2023  润新知