永发信息网

数据库中的一张表没有建索引的情况下,数据量越大对数据的插入的影响是不是也越大?

答案:2  悬赏:0  手机版
解决时间 2021-03-11 14:49
  • 提问者网友:温柔港
  • 2021-03-10 15:52
比如同样的表结构,没有建立索引的情况下,一张表里面有100万数据,另一张表只有1万数据,现在要插入100条数据,效率是否一样?
最佳答案
  • 五星知识达人网友:蓝房子
  • 2021-03-10 17:04
如果不计算寻找空闲块的时间,应该一样。
全部回答
  • 1楼网友:封刀令
  • 2021-03-10 17:34
这里的distinct表示去重,也可以用group by实现, 两者的区别在于distinct会读取所有的记录,而group by是在分组之后每组只返回一条记录,也就是说后者读取的条数要少很多,效率会更高一些,因此可以将上述代码改为: create table validate_set as select user_id, wm_concat(',',brand_id) as brand from( select user_id,brand_id from t_alibaba_bigdata_user_brand_total_1 where type = '1' and visit_datetime > '07-15' group by user_id,brand_id )a group by user_id; 训练集和测试集建立好之后,我们可以通过以下命令来计算测试集的推荐数目: select sum(regexp_count(brand,',')+1) from t_tmall_add_user_brand_predict_dh; 其中regexp_count是odps的一个自建函数,它的用法如下: bigint regexp_count(string source, string pattern[, bigint start_position]) 表示计算 source 中从 start_position 开始,匹配指定模式pattern 的子串的次数。比如我们有一条输出结果是:100 1,2,3,4,通过计算其中的,数(3)+1=4就计算出推荐的个数了。 udf计算重复条数 udf(user-defined function)(用户定义函数),是用户根据实际应用的需要而自行开发的函数。在 eclipse 中的项目下新建 udf。填入 package 名称为:chanvee.udf,和 udf 类名:counthits,点击确认。插件会自动帮我们生成chanvee.udf包用于写 udf 代码,和test.chanvee.udf包用于本地测试。 编辑counthits.java文件,注意下文的long不能替换为long类型,否则在odps上运行会报method not found错误: package chanvee.udf import java.util.arrays; import java.util.hashset; import java.util.set; public class counthits extends udf { public long evaluate (string a,string b){ if(a == null || b == null) { return 0l; //异常值 } set set1 = new hashset(); set set2 = new hashset(); set1.addall(arrays.aslist(a.split(","))); set2.addall(arrays.aslist(b.split(","))); long hits = 0l; for(string s : set2){ if( set1.contains(s) ) hits++; } return hits; } } 本段函数的主要工作是在a串和b串去重后,计算它们中重复元素的个数。接下来在本地测试下 udf 。在test.jark.udf包中有两个文件testcounthits.java和testudfbase.java。由于如果 udf 的输入参数是多个的话,本地测试默认的分隔符是逗号,与我们brand中的逗号冲突了。所以修改下testudfbase.java文件的第15行的分隔符为空格(当然也可以其他符号): private final static string odps_separator = " "; 同时修改第72行,去掉(string),原因是long型不能强制转换成string: return callmeth.invoke(udfclass, input_parameter.toarray()) + "\n"; 在testcounthits.in文件中输入测试样例: 123456,444,555,666 123456,666,777,888 888,999
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯