标签: temp-tables

严重的MySQL性能问题(连接,临时表,Filesort ....)

我有一张用户表和一张投票表.投票表存储对其他用户的投票.无论好坏,投票表中的一行,都会在两个用户之间的两个方向上存储投票.

现在,问题在于我想列出一些人投票的所有人.

我不是MySQL的专家,但是根据我的想法,由于join语句中的OR条件,它需要查看整个 users表(目前是+44,000行),并创建一个临时表来做所以.

目前,bellow查询大约需要两分钟,是的,两分钟即可完成.如果我在join语句中删除OR条件及其后面的所有内容,它会在不到半秒的时间内运行,因为它只需要查看44,000个用户行中的大约17个(解释 ftw!).

下面的示例,用户ID是9834,我正在尝试获取他/她自己没有投票,并加入投票的用户的信息到结果.

是否有更好,更快的方法来执行此查询?或者我应该重组表格?我真的希望可以通过修改查询来修复它,因为表中已经有很多用户(+44,000)和投票(+130,000),我必须迁移它们.

谢谢 :)

SELECT *, votes.id as vote_id 
FROM `votes` 
LEFT JOIN users ON (
  (
    votes.user_id_1 = 9834
    AND
    users.uid = votes.user_id_2
  )
  OR
  (
    votes.user_id_2 = 9834
    AND
    users.uid = votes.user_id_1
  )
)
WHERE (
  (
    votes.user_id_1 = 9834
    AND
    votes.vote_1 = 0
  )
  OR
  (
    votes.user_id_2 = 9834
    AND
    votes.vote_2 = 0
  )
)
ORDER BY votes.updated_at DESC
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)

mysql database performance join temp-tables

3
推荐指数
1
解决办法
4163
查看次数

PHP,MySQL和临时表

Php新手.

1.这个PHP和MySQL代码有什么问题吗?

include_once "db_login.php" ;

$sql = "DROP TEMPORARY TABLE IF EXISTS temp_sap_id_select" ;
mysql_query ( $sql ) or ( "Error " . mysql_error () ) ;

$sql = " CREATE TEMPORARY TABLE temp_sap_id_select 
               (
                 `current_page` INT NOT NULL,
                 `total_pages` INT NOT NULL,
                 `select_date` DATE NOT NULL,
                 `select_schcode` CHAR(6) NOT NULL,
                 `select_user` CHAR(30) NOT NULL,
                 `select_id` CHAR(9) NOT NULL
               ) " ;
mysql_query ( $sql ) or ( "Error " . mysql_error () ) ;
Run Code Online (Sandbox Code Playgroud)

2.不可否认,我是一个沉闷的男孩,但无论如何我会问:如果我使用MySQL GUI并打开目标数据库,它是否会知道PHP/MySQL创建的上述临时表(如果临时表是否正确创建)?

php mysql temp-tables

3
推荐指数
1
解决办法
1万
查看次数

ORA-14551:无法在查询中执行DML操作

我在里面有以下内容package,它给了我一个错误:

ORA-14551: cannot perform a DML operation inside a query
Run Code Online (Sandbox Code Playgroud)

代码是:

DECLARE 
    CURSOR F IS
        SELECT ROLE_ID 
        FROM ROLE 
        WHERE GROUP = 3 
        ORDER BY GROUP ASC;

BEGIN
FOR R IN F LOOP

DELETE FROM my_gtt_1;
COMMIT;

 INSERT INTO my_gtt_1
  ( USER, role, code, status )
(SELECT 
 trim(r.user), r.role, r.code, MAX(status_id)
FROM 
  table1 r, 
  tabl2 c
WHERE 
      r.role = R.role
  AND r.code IS NOT NULL
  AND c.group = 3
  GROUP BY 
  r.user, r.role, r.code);

  SELECT c.role,
                  c.subgroup,
                  c.subgroup_desc, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql temp-tables

3
推荐指数
1
解决办法
3万
查看次数

普通表或全局临时表?

我和另一位开发人员正在讨论哪种类型的表更适合我们的任务.它基本上是一个缓存,我们将在一天结束时截断.就个人而言,我认为没有任何理由为此使用除普通表之外的任何东西,但他想使用全局临时表.

一个或另一个有什么好处吗?

sql-server temp-tables

3
推荐指数
1
解决办法
2112
查看次数

在CakePHP中创建临时表并将其作为模型加载

我的计划是使用$ this-> Model-> query()创建一个临时表; 方法然后加载它作为模型,但我得到一个错误保持"缺少数据库表".将调试打开到第二级显示临时表已成功完全创建但由于某种原因,当我尝试将其作为模型加载时,它不起作用.看起来蛋糕甚至没有尝试查看表是否存在,因为没有显示"显示全部列..."查询.不确定如何强制蛋糕检查它的存在.

$tmpModel = 'tempModel';
$tmpTable = 'temp_models';

$this->Model->query('CREATE TEMPORARY TABLE `'.$tmpTable ... );
$this->loadModel($tmpModel);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

php sql cakephp temp-tables

3
推荐指数
1
解决办法
4078
查看次数

实体框架和存储过程返回临时表的问题

(免责声明-我不是数据库设计师。我只是可怜的开发人员,必须做这项工作。)

目前有17个表格具有相同的结构-名称,地址,电话号码。

给定一个电话号码,我必须检查任何表中是否有匹配的条目,然后返回该地址。

因此,我创建了一个视图以获取表列表(有一个保存该信息的ref表),然后创建了一个存储过程来

  1. 创建一个临时表,
  2. 使用游标,使用sql串联检查视图中的每个表是否包含电话号码。如果找到一条记录,请将其插入到临时表中。
  3. 返回临时表中的行。

所有这些都可以在直接的T-SQL中运行。

现在,我正在尝试使用Entity Framework 4+来调用存储过程。但是函数导入接口不会生成列。它说返回类型= none,并且LINQ代码期望一个int并且不会编译。

关于如何进行这项工作的任何想法?

我知道,如果绝对有必要,我可以将检查表部分移到代码中,但是我希望上面的方法可以工作。

sql-server entity-framework temp-tables

3
推荐指数
1
解决办法
8466
查看次数

视图和临时表之间的性能差异

Views和Temporary表的性能是否有任何重大差异.我有将数据从一个数据库迁移到另一个数据库的情况.我必须将视图中的源数据提取到目标数据库中的表.

由于其中没有唯一字段,我尝试将视图中的数据提取到临时表中,以及将数据推送到目标表的过程.我没有发现任何关于时间的重大性能变化.

sql view temp-tables sql-server-2008

3
推荐指数
1
解决办法
1万
查看次数

Mysql Full Outer加入临时表

关于mysql(5.1.36)中的完全加入有很多问题.当然,解决方案是join-union组合.

我的问题是我有两个这样的临时表:

CREATE TEMPORARY TABLE wConfs
(
    idWorker INT,
    confs SMALLINT
) ENGINE=INNODB;

CREATE TEMPORARY TABLE wRejects
(
    idWorker INT,
    rejects SMALLINT
) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)

JOIN-UNION mix不能用于完全连接临时表,因为它会导致ERROR 1137 (HY000): Can't reopen table.

我的问题是 - 什么是最简单的解决方案,以实现临时表的完全连接?

编辑:JOIN-UNION混合:

SELECT wc.idWorker, wc.confs, wr.rejects FROM wConfs wc LEFT JOIN wRejects wr 
ON (wr.idWorker = wc.idWorker)
UNION
SELECT wc.idWorker, wc.confs, wr.rejects FROM wConfs wc RIGHT JOIN wRejects wr 
ON (wr.idWorker = wc.idWorker);
Run Code Online (Sandbox Code Playgroud)

mysql join temp-tables

3
推荐指数
1
解决办法
4471
查看次数

使用IF/ELSE并插入临时表

我正在尝试编写一个接受两个输入(内容ID和内容类型)的SQL查询,根据用户设置的内容类型从不同的源表填充临时表,然后最终针对temp运行查询表.我想我会把我的临时表合并到我的IF/ELSE语句中.

所以我的问题是,为什么这会返回一些非零数量的结果:

DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int)

INSERT INTO @tags_current (contentID, taxonomyID, isPrimary)
SELECT resourceID as contentID, taxonomyID, isPrimary
FROM resource2taxonomy r2t
WHERE r2t.resourceID = @contentID

SELECT * FROM @tags_current
Run Code Online (Sandbox Code Playgroud)

而这会返回零结果:

DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int)

IF (@contenttype = 'resource')
BEGIN
    INSERT INTO @tags_current (contentID, taxonomyID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server temp-tables

3
推荐指数
1
解决办法
84
查看次数

WITH子句和临时表之间有什么区别?

用外行术语来说,WITH子句和临时表之间的主要区别是什么?

在哪种情况下最好使用一种?

sql data-warehouse temp-tables with-clause amazon-redshift

3
推荐指数
1
解决办法
2698
查看次数