sql

  1. TOP 子句
TOP 子句用于规定要返回的记录的数目。对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
SELECT TOP 50 PERCENT * FROM Persons
mysql用limit来实现相关的功能,而且功能更加强大
LIMIT 子句可以用于强制SELECT语句返回指定的记录数
LIMIT接受一个一个或者两个数字参数,参数必须是一个整数常量
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目
SELECT * FROM table_name LIMIT 5,10//检索记录行6~15,注意10为偏移量
SELECT * FROM table_name LIMT 95,-1//检索记录行96~last
SELECT * FROM table_name LIMT 5 //检索前5个记录行
  1. union和union all
union all把数据结构相同的两个表合并成一个表,并不去掉重复的。
union 把数据结构相同的两个表合并成一个表,相同的数据合并成一条。
尽量用union all代替union
  1. ORDER By rand()
随机检索n条记录
  1. 使用合理的分页方式以提高分页的效率
select id,name from table_name limit 866613, 20
使用上述sql语句做分页的时候,可能有人会发现,随着表数据量的增加,直接使用limit分页查询会越来越慢。
优化的方法如下:可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。比如此列中,上一页最大的id是866612。sql可以采用如下的写法:
select id,name from table_name where id> 866612 limit 20
  1. 不建议使用%前缀模糊查询,例如LIKE “%name”或者LIKE “%name%”,这种查询会导致索引失效而进行全表扫描。但是可以使用LIKE “name%”。可以使用全局索引
创建全文索引的sql语法是:
ALTER TABLE `table_name` ADD FULLTEXT INDEX `idx_user_name` (`user_name`);
使用全文索引的sql语句是:
select id,fnum,fdst from table_name 
where match(user_name) against('zhangsan' in boolean mode);
  1. inner join是由mysql选择驱动表,但是有些特殊情况需要选择另个表作为驱动表,比如有group by、order by等「Using filesort」、「Using temporary」时。STRAIGHT_JOIN来强制连接顺序,在STRAIGHT_JOIN左边的表名就是驱动表,右边则是被驱动表。在使用STRAIGHT_JOIN有个前提条件是该查询是内连接,也就是inner join。其他链接不推荐使用STRAIGHT_JOIN,否则可能造成查询结果不准确。
  2. s
posted @ 2019-03-09 21:14  shakerChann  阅读(220)  评论(0编辑  收藏  举报