我们在查询数据时,往往需要指定返回几行数据。如现在有一个 B/S 架构的应用程序,
其每一页可能只显示 30 条记录。此时为了提高显示的效率,一般就要求数据库一次只返
回三十条纪录。等用户按下一页的时候,再从数据库中返回 30 条记录,以此类推。这可
以缩短数据显示的时间。当查询的基表比较大时,这个措施非常有效。此时可以使用
Limit 关键字来实现这个需求。Limit 子句可以被用于强制 Select 查询语句返回指定的记
录数量。
通常情况下,Limit 关键字可以接受一个或者两个数字参数。需要注意的是,这个参数
必须是一个整数常量。如果用户给定两个参数,则第一个参数表示第一个返回记录行的偏
移量,第二个参数则表示返回记录行的最大数据。另外需要提醒的是,初始记录行的偏移
量是 0,而不是 1。不少用户会在这里犯错误。
虽然使用了 Limit 语句来限制返回的记录数,从而可以提高应用程序的工作效率。
但是其也会给系统的性能带来一些负面影响。如可能会导致全表扫描等等。为此笔者给出
一些 Limit 关键字的优化的建议,以供大家参考。
建议一:灵活使用 Limit 0 子句
根据 Limit 关键字的定义,如果参数为 0 的话,则其返回的是空记录。这看起来好
像没有多少的意义。其实不然。在实际工作中,灵活使用这个 0 参数,能够给我们带来很
大的收获。
如现在数据库工程师想要确认一下某个查询语句的有效性,如果直接运行这个查
询语句,需要等待其返回的记录。如果涉及的纪录数量比较多,或者运算逻辑比较复杂,
那么需要等到比较长的时间。此时就可以在 Select 查询语句中,使用 Limit 0 子句。只要查
询语句没有语法上的错误,这就可以让数据库快速的返回一个空集合。从而帮助数据库设
计人员迅速的判断查询语句的有效性。另外这个空集和中还会返回某个表的各个字段的数
据类型。即通过这个 Limit 0 子句还可以查询某个表的表结构。
可见灵活应用 Limir 0 子句,确实能够给我们带来不小的收益。不过需要注意的是,
在某些特定的场合下,这个子句可能不会奏效。如通常情况下,在 Monitor 工作环境中不
支持这个 Limit 0 子句。此时结果只会显示 Empty Set,而不是我们所需要的结果。
建议二:Limit 与 Group By 结合使用
Group By 关键字主要用来对数据进行分类汇总。不过在分类汇总之前,往往需要