mysql中sql语句问题

小小丁灬 发布于 2016/09/13 13:31
阅读 284
收藏 1

看到个面试题是这样的: select * from table_a where a=123 and b=456 order by c desc limit 10

这句sql有什么问题?

我只能看出,不要用*,其他看不出来,求指点下.

加载中
0
猫神
猫神

(1)*号问题

(2)复合索引问题

        MYSQL是只能有一个索引生效的,根据你给的SQL,索引位置涉及到a,b,c三列。假如WHERE和ORDER最多确认就是ABC3列的话,那么就需要创建复合索引,至于靠左原则,就看你SQL哪个列用得最多,

0
_Mr_Right_
_Mr_Right_
* 号不能说错了!可以算不  和谐  
_Mr_Right_
_Mr_Right_
没错,这个语句是可以执行的!
小小丁灬
除了这个*号,还能看出来什么别的问题吗?
0
JanGin_Chan
JanGin_Chan
如果数据量大的话,最好在查询条件和排序条件上建索引
0
skhuhu
skhuhu
没毛病·
0
zhangdedezhu
zhangdedezhu

1 . sql 标准问题

  能不能用* 是第一个问题,但是你需要知道为啥不能用*

 order by c ,如果select 的时候不选择c的字段的话,这句话在严格sql下是报错的

2. 索引问题

上面那位已经说得挺明白的了

0
艾斯_韩
艾斯_韩

其实用不用* 问题不大,最重要的是

你并不知道这个表的数据量有多大,表结构如何,那些列有索引。

where a=123 and b=456 order by c desc 

如果 a 或者 b 不是索引列那么会导致全表扫描,严重的有可能会导致锁表,因为你不知道整个上面有没有其他的应用

假设有一个有索引,那么返回量有多少?会不会大过内存排序空间导致排序在磁盘上面执行?

最后,这个sql语句执行的频率是怎么样的?可以考虑的地方还是很多的,不过这应该是面试dba的吧?开发岗位一般不会这样折腾你

返回顶部
顶部