标签: query-optimization

使用Left Join的Mysql查询太慢了

查询:

   select `r`.`id` as `id` 
     from `tbl_rls` as `r` 
left join `tblc_comment_manager` as `cm` on `cm`.`rlsc_id` != `r`.`id`
Run Code Online (Sandbox Code Playgroud)

两张桌子都有8k记录,但为什么它很慢,有时需要2-3分钟?

OMG,这个查询使mysql服务器失效.会在一秒钟内回复你们的人民:(

建议索引列的所有人都是正确的.是的,我写的查询很愚蠢.谢谢你纠正我.

mysql sql join query-optimization

8
推荐指数
2
解决办法
2万
查看次数

Postgresql 比较 2 个查询以进行优化

我刚刚创建了几个查询,它们带来了相同的数据,但使用了不同的数据。第一个使用子查询,第二个使用自连接策略。检查文档,我找到了 ANALYZE 和 EXPLAIN 命令,现在我试图了解哪个查询更好。这是每个查询的 EXPLAIN ANALYZE 的结果。希望有人能给我一些关于结果的解释,如果可能的话,给我一些参考点,在哪里可以找到更多信息,坦克你。

 EXPLAIN ANALYZE
 SELECT historicoestatusrequisicion_id, requisicion_id, estatusrequisicion_id, 
       comentario, fecha_estatus, usuario_id
  FROM historicoestatusrequisicion
  WHERE requisicion_id IN
  (
  SELECT requisicion_id FROM historicoestatusrequisicion
  WHERE usuario_id = 27 AND estatusrequisicion_id = 1
  )
ORDER BY requisicion_id, estatusrequisicion_id;
Run Code Online (Sandbox Code Playgroud)

这是结果

"Sort  (cost=240.15..242.42 rows=906 width=58) (actual time=72.470..80.575 rows=3066 loops=1)"
"  Sort Key: public.historicoestatusrequisicion.requisicion_id, public.historicoestatusrequisicion.estatusrequisicion_id"
"  Sort Method:  quicksort  Memory: 436kB"
"  ->  Hash Join  (cost=96.44..195.65 rows=906 width=58) (actual time=16.198..46.765 rows=3066 loops=1)"
"        Hash Cond: (public.historicoestatusrequisicion.requisicion_id = public.historicoestatusrequisicion.requisicion_id)"
"        ->  Seq …
Run Code Online (Sandbox Code Playgroud)

postgresql query-optimization sql-execution-plan

8
推荐指数
1
解决办法
4259
查看次数

SQL Server查询调优:为什么CPU时间高于经过时间?它们与设定操作有关吗?

我有两个查询来过滤一些用户ID依赖于问题及其答案.

脚本

查询A是(原始版本):

SELECT userid
FROM mem..ProfileResult
WHERE ( ( QuestionID = 4
          AND QuestionLabelID = 0
          AND AnswerGroupID = 4
          AND ResultValue = 1
        )
        OR ( QuestionID = 14
             AND QuestionLabelID = 0
             AND AnswerGroupID = 19
             AND ResultValue = 3
           )
        OR ( QuestionID = 23
             AND QuestionLabelID = 0
             AND AnswerGroupID = 28
             AND ( ResultValue & 16384 > 0 )
           )
        OR ( QuestionID = 17
             AND QuestionLabelID = 0
             AND AnswerGroupID = 22
             AND …
Run Code Online (Sandbox Code Playgroud)

sql-server performance query-optimization cpu-time

8
推荐指数
1
解决办法
8848
查看次数

如何优化mysql查询:使用来自两个表的单个Query计数类别和子类别

我需要帮助来优化此MySQL查询以获得更好,更快的性能.

这是SQL FIDDLEwith Query和表结构.

基本上我有两张桌子

tbl_category

CREATE TABLE IF NOT EXISTS `tbl_category` (
  `category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_name` varchar(20) NOT NULL,
  `parent_category_id` int(10) unsigned DEFAULT NULL,      
  PRIMARY KEY (`category_id`),
  UNIQUE KEY `category_name` (`category_name`,`parent_category_id`),
  KEY `category_parent_id` (`parent_category_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

--
-- data for table `tbl_auction`
-- 
+-------------+---------------+--------------------+-----------------+
| category_id | category_name | parent_category_id | category_status | 
+-------------+---------------+--------------------+-----------------+
|           1 | Boats         |               NULL | a               | 
|           2 | Books         |               NULL | a               | …
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization

8
推荐指数
1
解决办法
1029
查看次数

选择性在索引扫描/搜索中的作用

我一直在阅读许多SQL书籍和文章中,选择性是创建索引的重要因素.如果色谱柱的选择性较低,则索引搜索会带来更大的危害.但这些文章都没有解释原因.任何人都可以解释为什么会这样,或提供相关文章的链接?

sql indexing query-optimization

8
推荐指数
1
解决办法
4304
查看次数

为什么当一个包罗万象的SELECT已经运行时,各个SELECT查询会运行?(轨道/ ActiveRecord的)

我有以下代码(注意includes.each):

subscribers = []
mailgroup.mailgroup_members.opted_to_receive_email.includes(:roster_contact, :roster_info).each { |m|
  subscribers << { :EmailAddress => m.roster_contact.member_email,
                   :Name => m.roster_contact.member_name,
                   :CustomFields => [ { :Key => 'gender', 
                                        :Value => m.roster_info.gender.present? ? m.roster_info.gender : 'X' 
                                    } ] 
                  } if m.roster_contact.member_email.present?
}
subscribers
Run Code Online (Sandbox Code Playgroud)

相应地,我在日志中看到以下内容(即select * from ROSTER_INFO ... IN (...)):

SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` IN ('1450', '1000', '1111')
Run Code Online (Sandbox Code Playgroud)

然而,紧接着之前的查询列表中select * from ROSTER_INFO已经指定了每个ID IN:

RosterInfo Load (84.8ms)  SELECT `ROSTER_INFO`.* FROM `ROSTER_INFO` WHERE `ROSTER_INFO`.`ID` = '1450' …
Run Code Online (Sandbox Code Playgroud)

sql activerecord ruby-on-rails query-optimization ruby-on-rails-3.2

8
推荐指数
1
解决办法
253
查看次数

在Teradata中使用COLLECT STATISTICS

在Teradata我可以使用像...这样的声明

collect statistics on my_table column(col1)
Run Code Online (Sandbox Code Playgroud)

这将收集表上的统计信息并将它们存储在DBC视图中,如ColumnStats,IndexStats和MultiColumnStats.我也认为优化器(解析引擎)会在可用时找到统计信息,并使用它们而不是估计的基数/索引值计数来更好地决定如何执行查询.

这听起来很棒,但我有一些问题.

  • 使用有什么不利之处collect stats吗?
  • 何时在SQL脚本中使用收集统计信息是否合适/不合适?
  • 收集已编入索引的字段的统计信息的性能优势是什么?
  • 统计信息存储多长时间(表,易失性表)?
  • 任何其他评论collect statistics将不胜感激.

sql database query-optimization teradata

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

SQL - 加速查询

我目前使用以下查询,由于数据量(约14个月),大约需要8分钟才能返回结果.有没有办法可以加快速度呢?

有问题的数据库是带有InnoDb引擎的MySQL

select
    CUSTOMER as CUST,
    SUM(IF(PAGE_TYPE = 'C',PAGE_TYPE_COUNT,0)) AS TOTAL_C,
    SUM(IF(PAGE_TYPE = 'D',PAGE_TYPE_COUNT,0)) AS TOTAL_D
from
        PAGE_HITS
where
    EVE_DATE >= '2016-01-01' and EVE_DATE <= '2016-01-05'
    and SITE =  'P'
    and SITE_SERV like 'serv1X%'
group by
    CUST
Run Code Online (Sandbox Code Playgroud)

数据分区为6个月.进入where子句的每一列都被编入索引.有一些相当多的索引,这将是一个很大的列表,在这里列出.因此,只需用文字进行总结.对于该查询,EVE_DATE + PAGE_TYPE_COUNT是复合指标之一&所以是CUST + SITE_SERV + EVE_DATE,EVE_DATE + SITE_SERV,EVE_DATE + SITE,

主键实际上是一个虚拟自动增量编号.它不是老实说.我无法访问解释计划.我会看到我能为此做些什么.

我很感激有任何帮助来改善这个.

mysql sql query-optimization

8
推荐指数
1
解决办法
123
查看次数

ColumnarToRow 如何在 Spark 中高效操作

在我的理解中,柱状格式更适合 Map Reduce 任务。即使对于某些列的选择,柱状也能很好地工作,因为我们不必将其他列加载到内存中。

但是在 Spark 3.0 中,我看到这个ColumnarToRow操作被应用于查询计划中,根据我从文档中可以理解的内容将数据转换为行格式。

它比柱状表示的效率如何,支配该规则应用的见解是什么?

对于以下代码,我附上了查询计划。

import pandas as pd

df = pd.DataFrame({
    'a': [i for i in range(2000)],
    'b': [i for i in reversed(range(2000))],
})

df = spark.createDataFrame(df)

df.cache()
df.select('a').filter('a > 500').show()

Run Code Online (Sandbox Code Playgroud)

查询计划

mapreduce query-optimization apache-spark apache-spark-sql pyspark

8
推荐指数
1
解决办法
322
查看次数

INSERT INTO SELECT 非常慢,但是 INSERT 或 SELECT 单独运行时很快

我有一个这样的SQL:

INSERT INTO table1 (column1, column2) (
    SELECT column3, column4 FROM table2 WHERE column5 = 'value'
);
Run Code Online (Sandbox Code Playgroud)
  • table13,500,000 行。
  • table2900,000 行。
  • SELECT column3, column4 FROM table2 WHERE column5 = 'value'返回 NO 寄存器(零)并且需要大约 0.004 秒。
  • INSERT INTO table1 (column1, column2) VALUES ('value', 'value')也需要约 0.004 秒。

但是,当我将两者结合在一个INSERT INTO SELECT语句中时(如上所示),大约需要 7.7 秒。有解释吗?有解决办法吗?

sql database query-optimization mariadb sql-insert

8
推荐指数
2
解决办法
5989
查看次数