Python 更高效的SQLite内部连接和多线程

Python 更高效的SQLite内部连接和多线程,python,multithreading,sqlite,join,Python,Multithreading,Sqlite,Join,我的SQLite内部连接在每个数据集10Gb的数据上存在效率问题 我正在运行以下程序 CREATE TABLE merged AS SELECT * FROM xrootd INNER JOIN condor ON SUBSTR(xrootd.[U.mAppInfo], 0, INSTR(xrootd.[U.mAppInfo], '_')) == SUBSTR(condor.User, 6, INSTR(condor.User, '@')) AN

我的SQLite内部连接在每个数据集10Gb的数据上存在效率问题

我正在运行以下程序

CREATE TABLE merged AS 
  SELECT * FROM xrootd 
  INNER JOIN condor ON 
     SUBSTR(xrootd.[U.mAppInfo], 0, INSTR(xrootd.[U.mAppInfo], '_')) == 
        SUBSTR(condor.User, 6, INSTR(condor.User, '@'))
    AND abs(xrootd.[F.mOpenTime] - condor.JobStartDate) <= 60;
有更好的方法吗?我已经尝试过simple BASH(停止是因为它不是那么简单)和Python(内存溢出)。我可以从CERN获得根树格式的数据,但SQLite似乎更适合于此

我的想法

  • 使用预字符串拆分创建新表,即所有子字符串(…,INSTR(…)
  • 获取存在于两个连接中并运行两个内部连接的用户的唯一列表
  • 同上,但适用于次
  • SQLite多线程,如果有一个简单的方法可以做到这一点

我不想在不知道什么可能更好的情况下运行这些天,但我会让它同时运行。

我首先想到的是,你的JOIN中有一个WHERE子句:

AND abs(xrootd.[F.mOpenTime] - condor.JobStartDate) <= 60;

和abs(xrootd.[F.mOpenTime]-condor.JobStartDate)我首先想到的是,你的JOIN中有一个WHERE子句:

AND abs(xrootd.[F.mOpenTime] - condor.JobStartDate) <= 60;

和abs(xrootd[F.mOpenTime]-condor.JobStartDate)有更好的方法吗?是的,当您的数据如此大时,不要使用SQLite。使用功能齐全的DBMS。

有更好的方法吗?是的,当您的数据如此大时,不要使用SQLite。使用功能齐全的DBMS。

每个表的每个条目都有该表的唯一索引。我明天就试试你说的,然后再回来汇报。谢谢WHERE子句可能有帮助,我想主要的问题是我把整个SUBSTR(condor.User,6,INSTR(condor.User,“@”)搞错了。第二个指标是差异。ie SUBSTR(condor.User,6,INSTR(condor.User,'@')-6)。几分钟后就结束了。每个表的ThanksEvery条目都有该表的唯一索引。我明天就试试你说的,然后再回来汇报。谢谢WHERE子句可能有帮助,我想主要的问题是我把整个SUBSTR(condor.User,6,INSTR(condor.User,“@”)搞错了。第二个指标是差异。ie SUBSTR(condor.User,6,INSTR(condor.User,'@')-6)。几分钟后就结束了。谢谢
CREATE TABLE merged AS
SELECT *
FROM xrootd
INNER JOIN condor
ON SUBSTR(xrootd.[U.mAppInfo], 0, INSTR(xrootd.[U.mAppInfo], '_')) ==  SUBSTR(condor.User, 6, INSTR(condor.User, '@'))
WHERE abs(xrootd.[F.mOpenTime] - condor.JobStartDate) <= 60;