业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。
普遍的SQL及代码写法如下:
SELECT count(*) FROM table WHERE a = 1 AND b = 2
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
} else {
推荐写法如下:
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
} else {
SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了业务代码中直接判断是否非空即可。
根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。
业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下:// SQL写法: SELECT count(*) FROM table WHERE a = 1 AND b = 2 // Java写法: int nums = xxDao.countXxxxByXxx(params); if ( nums > 0 ) { // 当存在时,执行这里的代码 } else { // 当不存在时,执行这里的代码 } 优化
结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
sql 语句就是对数据库进行操作的一种语言。
常见语句
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)
排序:select * from table1 order by field1,field2 [desc]
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1[separator]
spark.sql("select id, array_field from tmp_v where array_contains(array_field, 'hello')").show(200, false)
参考:https://spark.apache.org/docs/latest/api/sql/#array
查询某个数据是否存在
假设存在表user{id,name…},表中存在大量数据,此时仅想通过sql语句查找判断是否存在相同的ID。
传统的方法是使用count,他会统计具体的数据,但是显然需要遍历表中所以的数据,当数据量很大时,效率较低。
改善方法:
select 1 from user where id = xxx limit 1;
上述语句会user表中遍历到第一个满足条件(id=xxx)时...
SELECT count(*) FROM `t_user` where username='tw'
这种实现方式没有问题,但是如果只是单纯的判断数据是否存在,似乎有点小题大做。
下面推荐一种方式(在索引等其他条件都相同的情况下):
SELECT count(*) FROM `t_user` where username='tw'.
判断数据库总是否存在某一条数据方法有二:
一、 获取数据库中所有的数据在进行判断,在用in判断是否在返回的结果中,这种方法类似于下面这种场景:
s_list = [i for i in range(100000)]
a = 9999
if a in s_list:
print(1)
else:
print(2)
如果数据是少量的具有可行性,如果数据一旦打起来的话就会出现以下错误:
最近大概要处理10亿条数据,于是模拟了10亿数据内存直接蹦了。
二、 在查询语句上面做优化,我网上逛了一圈,
SELECT count(*) FROM table_name WHERE condition1 AND …
Java:
int nums = xxMapper.countXxxxByXxx(params);
if ( nums > 0 ) {
//当存在时,执行这里的代码
} else {
//当不存在时,执行这里的代码
SQL:
SELECT 1 FROM table_name WHERE condition1 AND … LIMIT 1
Java:
Integer ex
这次就标号数组(或者叫键值数组)的键的是否存在的检查,进行说明。
标号数组可以新增加键,并给予赋值,同时将该键的区域分配给存储器。
也就是说,通过新增加键值,可以轻松扩展领域保存数值。
那么,用新的键代入来扩展区域的话,如果使用不存在的的键,会发生错误。
<使用不存在的键访问而导致错误的示例>
SQL> connect scott/tiger
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 TYPE A_TYPE IS TABL
QString equipmentId;
QSqlQuery query(plusFSdb);
QString sql="select b.equipid equipid from fiverule b";
if(!query.exec(sql))
查询某个数据是否存在
假设存在表user{id,name…},表中存在大量数据,此时仅想通过sql语句查找判断是否存在相同的ID。
传统的方法是使用count,他会统计具体的数据,但是显然需要遍历表中所以的数据,当数据量很大时,效率较低。
改善方法:
select 1 from user where id = xxx limit 1;
上述语句会user表中遍历到第一个满足条件(id=xxx)时停止,返回结果为1,若未查到相应的结果,返回null
I/O error while reading input message; nested exception is java.io.IOException: Stream closed
10736