以用户为中心的设计

这是UCDChina提前预览网页留下的存档,不包括作者可能更新过的内容。
推荐您进入文章源地址阅读和发布评论:http://hi.baidu.com/yzx11......0b55a92b.html

改变了对Mysql子查询的看法

作者:yzx110  |   发布: (编辑)Tony   |   时间:2008-11-08 16:12:11 文字大小:- +

最开始使用SQLServer,我喜欢这么用SQL:select * from table1 where id in (select table1_id from table2 where table2_filed = xxxx) and table1_field = yyy; 这里的一个查询其实会分为两个查询,对table1和对table2的子查询,这样写能让每个查询都尽量使用索引。

   曾几何时,使用mysql的时候用explain分析查询,发现mysql里面的子查询很慢,而mysql文档里很多时候也推荐使用join,于是我认定 了mysql的子查询实现的很烂,以后的程序里面都用join了。例如上面的查询我就写成:select a.* from table1 a join table2 b on b.table2_field=xxx and b.table1_id=a.id where a.table1_field = yyy;

   今天早上,接到一个电话,说ucdchina.com挂 了。上去一看,一个表被管理员rename了,理由是涉及这个表的查询太耗时了,平均40s左右。我只能说,dreamhost实在太烂了,两个表总共不 到2000条数据,怎么也不用那么久来查吧。我拿到管理员发出的慢查询,用explain看了一下,果然use filesort,use temporary file,SQL语法就是类似上面join那个例子。然后我根据查询里的字段建了两个索引,但是没效果。最后习惯性的尝试了一下子查询,把上面join的 那个格式修改为in的方式,explain 的结果马上变成use index; use where。终于又对mysql的in恢复了信心。

   优化了ucdchina.com的将近10条语句,整个网站速度快多了。

更多
打印  |  相关话题:UCD大社区的设计   |  类别:设计之外  |  源地址

UCDChina的书

《UCD火花集2》封面
UCDChina编著,定价35元
从卓越网购买 从当当网购买

《UCD火花集》封面
UCDChina编著,定价25元
从卓越网购买 从当当网购买

《应需而变——设计的力量》封面
UCDChina团队成员JunChen译,定价29元
从卓越网购买 从当当网购买

《网页设计解析》封面
UCDChina团队成员周陟著,定价62元
从卓越网购买 从当当网购买

《赢在用户》封面
UCDChina团队成员Angela译,定价29元
从卓越网购买 从当当网购买

《用户体验的要素》封面
UCDChina团队成员Angela译,定价25元
从卓越网购买 从当当网购买