好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mysql数据库 select语句where的作用

 where,是个好东西!

      但你面对千万级的数据,如何更快的所用遍历数据,并根据自己的需要处理数据?where会起到多大的作用?

      当然,前提是数据中的某数据有它的规律。

      假如,有一表有一个字段tableid为 int,唯一且索引 。在这个时候我们可以使用where字句让遍历加速。

      比较以下两个语句:

以下是代码片段:

 

select * from `tablename` order by `tableid` limit $numStart, 10000;select * from `tablename` where `tableid`>’$tableidStart’ order by `tableid` limit 10000;

      上面的例子是想根据tableid的顺序来遍历整个表,所以有个排序的字句。显然,对于千万级别的库或表来说排序这个费时间的事情,但是没关系,前面已经假设它有索引了,所以时间相对还是可以承受的。

      索引有这么大的作用么?不信可以看看mysql数据存储目录下的.MYI文件的大小,再看看.MYD文件的大小,一目了然!常言道,不能占着茅坑不拉屎,mysql很好的避免了这一点!

      相信你可以注意到limit子句中,偶限制的条件是[10000]。在损耗内存和操作 数据库 的权衡中,我还是比较倾向损耗内存。

      言归正传,说一下where子句。如果没有where,只有[$numStart, 10000],那么这个查询会如何进行呢?mysql会根据[order by `tableid`]以后,再找到前$numStart条数据,然后从第$numStart+1条数据开始返回1000条数据。请注意这个[再找到前$numStart条数据]的时间,它是随着$numStart的增加而增加的!

      时间的损耗,正在于此。没有时间的教训是不会注意到这个的。我曾犯过这个错误,然后认识到了这一点。但是,时间一长……又忘记啦!

      如果在这个时候,我们加上一个[where `tableid`>’$tableidStart’],时间的损耗立马减少了!这个字段是有索引的,找到一个特定的值的时间几乎可以忽略!在这个时候,对这个有索引的字段排序再找前10000条([limit 10000]),简直易如反掌!

      在我的测试中,假设没有where子句的语句要跑5个小时,那么加上这个where子句,只需40分钟!这个时间是怎么节省出来的?主要是在[再找到前$numStart条数据]的时间,前面提到这个几乎是个等差数列的方式的增长。而加上where子句,这个时间差几乎为0!

      特以此文,警示自己不再忘记!

      两条语句中使用两个变量,变量怎么来的,大家根据情况而定了。

查看更多关于mysql数据库 select语句where的作用的详细内容...

  阅读:53次