[原创]MySQL设计SQL语句优化规范_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3342 | 回复: 0   主题: [原创]MySQL设计SQL语句优化规范        下一篇 
tngou
注册用户
等级:中校
经验:2433
发帖:192
精华:15
注册:2014-4-28
状态:离线
发送短消息息给tngou 加好友    发送短消息息给tngou 发消息
发表于: IP:您无权察看 2014-6-6 17:21:14 | [全部帖] [楼主帖] 楼主   主页

1. 使用mysql explain 对sql执行效率进行检测 ,explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

 1) 使用方法:在select语句前加上explain即可

 2) explain 分析结果形式如下:

table | type | possible_keys | key | key_len | ref | rows | Extra


 explain 分析结果形式中各属性含义:

 table :显示这一行的数据是关于哪张表的

 type :这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

 possible_keys :显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

 key :实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引

 key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好

 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

 rows:MYSQL认为必须检查的用来返回请求数据的行数

 Extra :返回的描述的意义

2. 尽量使用 "inner join " 查询替换子查询条件中的 "in " ,防止由于数据量过大,引发数据库挂起问题

3.使用索引应注意问题:

1)查询语句的where条件后边使用 “!=”或“<>”时,索引不生效,和普通字段一样

2)查询语句的where条件后边使用字符串函数或其他函数,索引不生效,和普通字段一样

3)使用连接(join)查询时,只有在主键和外键的数据类型相同时索引才会生效

4)查询语句的where条件后边使用Like关键字应注意,like '%jx%' 和 like '%jx'方式索引均不生效, like 'jx%'方式索引生效

5)InnoDB数据表不支持全文索引

    

该贴由hui.chen转至本版2014-11-5 16:11:49




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论