Chinaunix

标题: 【已解决】sql语句是否最优如何判断 [打印本页]

作者: kongkong011    时间: 2013-08-19 18:58
标题: 【已解决】sql语句是否最优如何判断
本帖最后由 chinafenghao 于 2013-08-28 12:05 编辑

现在有下面一个查询语句 Select * from tabname where id=2 and password='abc’如何判断它是现在是最优的。
作者: kongkong011    时间: 2013-08-19 20:53
难道要看执行时间吗
作者: bikong0411    时间: 2013-08-20 08:53
expalin下看看是不是走索引了
作者: bikong0411    时间: 2013-08-20 08:53
还得看数据量
作者: kongkong011    时间: 2013-08-24 11:28
回复 3# bikong0411


    谢谢啊,真的有点意思
作者: kongkong011    时间: 2013-08-24 11:35
本帖最后由 kongkong011 于 2013-08-24 11:36 编辑

explain显示了mysql如何使用索引来处理select语句以及连接表
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:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

http://database.51cto.com/art/200912/168453.htm
作者: 飞鸿无痕    时间: 2013-08-26 22:53
回复 1# kongkong011


    explain 看看,另外select *本身就不会是最优的,一般不需要查出所有的数据,只执行需要的列是明智的选择,如果查出的结果有很多考虑使用limit
作者: a.a    时间: 2013-08-27 11:22
回复 6# kongkong011


    非常详细,感谢lz。我也顺便学习了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2