标签: query-performance

为什么这个oracle select语句需要几分钟才能完成?

这些表少于20个字段,属性有大约900万行,而列表有300万行,但这应该不是问题.这是数据库的用途......

listing_ids的类型为Number.到目前为止,我们最好的猜测是因为属性表有600万行,其中的listingids实际上并没有指向列表,Oracle花了很多时间寻找不存在的列表.这甚至有意义吗?

Select  count(*) 
from listings.rfs_listings listings  
    join listings.rfs_properties properties 
        on listings.listing_id= properties.listing_id        
where listings.display = 1  
    and properties.city= 'New York'
    and rownum <= 10;
Run Code Online (Sandbox Code Playgroud)

我对查询运行了解释计划并得到以下信息:

PLAN_TABLE_OUTPUT

Plan hash value: 772088252

-------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name                        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                             |    10 |  4110 |   283   (0)| 00:00:04 |
|*  1 |  COUNT STOPKEY                |                             |       |       |            |          |
|   2 |   NESTED LOOPS                | …
Run Code Online (Sandbox Code Playgroud)

sql oracle query-performance

2
推荐指数
1
解决办法
1145
查看次数

为什么我的 PostgreSQL 数组索引没有被使用(Rails 4)?

我有一个 PostgreSQL 字符串数组作为表中的一列。我使用 GIN 方法创建了一个索引。但任何查询都不会使用索引(相反,它们使用过滤器对整个表进行顺序扫描)。我缺少什么?

这是我的迁移:

class CreateDocuments < ActiveRecord::Migration
  def up
    create_table :documents do |t|
      t.string :title
      t.string :tags, array: true, default: []
      t.timestamps
    end

    add_index :documents, :tags, using: 'gin'

    (1..100000).each do |i|
      tags = []
      tags << 'even' if (i % 2) == 0
      tags << 'odd' if (i % 2) == 1
      tags << 'divisible by 3' if (i % 3) == 0
      tags << 'divisible by 4' if (i % 4) == 0
      tags << 'divisible …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing ruby-on-rails query-performance

2
推荐指数
1
解决办法
1386
查看次数

为什么 MongoDB 不同的查询计划显示不同的 nReturned 值?

faults我的MongoDB数据库中有一个集合,每个文档都有这些字段:rack_nametimestamp

为了测试和比较性能,我创建了这两个索引:

rack -> {'rack_name': 1}

time -> {'timestamp': 1}

现在我用explain()执行了以下查询:

db.faults.find({
    'rack_name': {
        $in: [ 'providence1', 'helena2' ]
    }, 
    'timestamp': {
        $gt: 1501548359000
    }
})
.explain('allPlansExecution') 
Run Code Online (Sandbox Code Playgroud)

结果如下:

 {
"queryPlanner" : {
    "plannerVersion" : 1,
    "namespace" : "quicktester_clone.faults",
    "indexFilterSet" : false,
    "parsedQuery" : {
        "$and" : [ 
            {
                "timestamp" : {
                    "$gt" : 1501548359000.0
                }
            }, 
            {
                "rack_name" : {
                    "$in" : [ 
                        "helena2", 
                        "providence1"
                    ]
                }
            }
        ]
    },
    "winningPlan" : { …
Run Code Online (Sandbox Code Playgroud)

indexing mongodb database-performance query-performance mongodb-query

2
推荐指数
1
解决办法
1280
查看次数

MySQL 性能 - 在多个表上 JOIN ON 与 JOIN USING

从原则上讲,哪个更快:

SELECT FROM t1 INNER JOIN t2 INNER JOIN t3 ON t1.c = t2.c = t3.c
Run Code Online (Sandbox Code Playgroud)

SELECT FROM t1 INNER JOIN t2 USING (c) INNER JOIN t3 USING (c)
Run Code Online (Sandbox Code Playgroud)

mysql sql query-performance

2
推荐指数
1
解决办法
2003
查看次数

在只有两种类型的值的列上创建索引的效果如何

我在一个列上创建了一个索引,它只有两个可能的值(Y 和 N),两个值的数据类型相同。

假设列名是指标。我写了一个选择语句,例如,

SELECT INDICATOR 
FROM TEMP_TABLE 
ORDER BY INDICATOR
Run Code Online (Sandbox Code Playgroud)

当我在 SQL developer 中为这个查询使用解释计划时,它使用的是全表扫描而不是索引扫描。

为什么不使用索引表扫描。

oracle query-performance database-indexes

2
推荐指数
1
解决办法
2083
查看次数

哪些索引可以提高JOIN和GROUP BY的性能

我已经设置了一些表并运行了查询。然而,在我的解释中,SQL 结果会出现在正在生成的临时表中(我认为这是因为 GROUP BY)

我添加了一些索引来加快查询速度,但想知道是否有办法停止使用临时表,以及是否有其他方法可以使用索引加快查询速度?

购物车数据

CREATE TABLE `cartdata` (
    `IDCartData` INT(11) NOT NULL AUTO_INCREMENT,
    `CartOrderref` VARCHAR(25) NOT NULL DEFAULT '',
    `UserID` INT(11) NOT NULL DEFAULT '0',
    `LastUpdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE 
    CURRENT_TIMESTAMP,
    `ManualContactName` VARCHAR(100) NOT NULL DEFAULT '',
    `ManualOrderConfirmationEmail` VARCHAR(100) NOT NULL DEFAULT '',
    PRIMARY KEY (`IDCartData`),
    INDEX `CartOrderref` (`CartOrderref`)
)
Run Code Online (Sandbox Code Playgroud)

购物车分割数据

    CREATE TABLE `cartsplitdata` (
        `IDCartSupplierData` INT(11) NOT NULL AUTO_INCREMENT,
        `IDCartData` INT(11) NOT NULL DEFAULT '0',
        `supplierid` INT(11) NOT NULL DEFAULT '0',
        `DeliveryDate` DATE NOT …
Run Code Online (Sandbox Code Playgroud)

mysql indexing performance group-by query-performance

2
推荐指数
1
解决办法
2191
查看次数

为什么 SELECT 语句中的简单函数调用会大大减慢我的查询速度?

我正在尝试重构一些 SQL 代码,使其更具可读性和可维护性;但是,我不想破坏性能。我试图将 select 语句中的一些列逻辑移至多个函数中,但发现性能大幅下降。我希望大家能帮助我理解为什么;更好的是,如何解决它!

重构后,我的代码大致类似于下面的示例。在重构之前, CASE 语句不是函数调用,而是直接位于 select 子句中的 SUM 函数内。

FUNCTION funcOne(@colA, @colB, @colC, @valX, @valY)
RETURNS INT AS
BEGIN
    RETURN CASE
        WHEN @colA = @colB
            THEN @valX + @valY
        WHEN @colC BETWEEN 1 AND 10
            THEN @valX
        ELSE 0
    END
END

FUNCTION funcTwo(@colA, @colB, @colC, @valX, @valY)
RETURNS INT AS
BEGIN
    RETURN CASE
        WHEN @colA <> @colB
            THEN @valX + @valY
        WHEN @colC BETWEEN 1 AND 10
            THEN @valY
        ELSE 0
    END
END

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server query-performance

2
推荐指数
1
解决办法
5466
查看次数

字符集和排序规则会影响 MySQL/MariaDB 中的查询性能吗?

我一直在 MariaDB 中开发一个具有大型且不断扩展的数据库的数据库。该数据库由 PHP 应用程序访问。

我将数据库字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci

但并非所有的表都有文本(varchar、text 等)列。有些表只保存关系,因此所有列都是数字类型(int、bigint 等)或日期/时间等,但不是文本类型。

在表中,我只保留数字,我是否需要保留 unicode 多字节字符集/排序规则,或者我可以选择其他内容?

最重要的是这会影响查询性能吗?

php mysql query-performance mariadb

2
推荐指数
1
解决办法
2949
查看次数

SQL join-on中约束放置的性能差异

准备好的查询结构和性能之间是否存在差异

select * 
from employee e
join division d
    on e.eid = d.eid
    and e.div = d.div
    and e.level > 5
    and e.startDate > sysdate - interval '60' month
;
Run Code Online (Sandbox Code Playgroud)

和:

select * 
from employee e
join division d
    on e.eid = d.eid
    and e.div = d.div
where 
    e.level > 5
    and e.startDate > sysdate - interval '60' month
;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql inner-join query-performance

2
推荐指数
1
解决办法
63
查看次数

更新/删除查询的性能

我想用同一个表生成的值更新我的表.

我的目标是使用像_NS和_WP这样的proftxt搜索所有行,并使用相同的ao,
将它们相加,将值除以ao 的_H,_G,_L-Elements的数量,并将此值添加到_H,_G和_o的那些对象.

对于ao,可能只有_NS和_WP行.比例程应跳过这个ao.

例:

我的数据如下:

an, ao, proftxt, value, year  
101 , 1, 'e_NSe', 5, 2006  
102 , 1, 'e_Ha', 1, 2006  
103 , 1, 'w_NSr', 4, 2006  

104 , 2, 'w_NSr', 2, 2006  
105 , 2, 'x_H05r', 4, 2006   
106 , 2, 'w_Gr', 2, 2006   
107 , 2, 'a_WPr', 4, 2006 

108 , 3, 'a_WPr', 4, 2006 
Run Code Online (Sandbox Code Playgroud)

我的数据应该是这样的:

an, ao, proftxt, value, year  
102 , 1, 'e_Ha', 10 2006  

103 , 2, 'x_H05r', 7, 2006  
103 , …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server query-performance sql-update sql-delete

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