包含标签 SQL 的文章

MySql Explain

Explain Explain 列 mysql> explain select * from users where userid=1; +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+ | 1 | SIMPLE | users | NULL | const | PRIMARY | PRIMARY | 8 | const | 1 | 100.00 | NULL | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+ 1 row in set, 1 warning (0.……

阅读全文

SQL优化

SQL优化 1.SQL语句中过滤条件where和having的区别 where 是一个约束声明,使用 where 约束来自数据库的数据,where 是在结果返回之前起作用,where 中不能使用聚合函数。 Having 是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在 Having 中可以使用聚合函数。 在查询过程中,where 子句执行优先级高于聚合语句。聚合语句(sum,min,max,avg,count)优先级高于 having 子句。 2.优化查询 MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及右模糊查询LIKE(’a%‘)。 对于不等于(!= 和 <>)会放弃使用索引而进行全表扫描。 对于左模糊like ‘%…’无法直接使用索引,但可以利用reverse,变化成 右模糊like ‘…%’。 对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效。 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 在 where 子句中对字段进行 null 值判断,会导致引擎放弃使用索引而进行全表扫描,所以字段要有默认值 在 where 子句中对字段进行函数、算术运算或其他表达式运算,会导致引擎放弃使用索引而进行全表扫描。 如果字段类型是字符串,where 时一定用引号括起来,否则索引失效 将大的 delete,update 或者 insert 查询变成多个小查询 如果插入数据过多,考虑批量插入 select语句务必指明字段名称,尽量避免使用”select * “。因为它会进行全表扫描。 Inner join 、left join、right join,优先使用 Inner join。如果是 left join,左边表结果尽量小。Inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。都满足 SQL 需求的前提下,推荐优先使用 Inner join(内连接),如果要使用 left join,左边表数据结果尽量小,如果有条件的尽量放到左边处理。 区分 in 和 exists、not in 和not exists……

阅读全文

SQL语法

Mysql Mysql分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize 第一个参数值m表示起始行,第二个参数表示取多少行(页面大小) mysql从0开始计数行数 Oracle Oralce分页 select * from ( select rownum rn,a.* from table_name a where rownum <= x //结束行,x = startPage*pageSize ) where rn >= y; //起始行,y = (startPage-1)*pageSize+1 创建索引 create index index_name(idx_****) on table table_name(column1_name,column2_name); oracle只查第一条数据 select * from (select * from <table> order by <key> desc) where rownum=1; oracle触发器……

阅读全文