标签: query-performance

jquery has()和filter()方法有什么区别

$ .has('selecor')和$ .filter('selector')方法有什么区别,哪个更好.因为它们都执行相同的操作.

performance jquery jquery-selectors query-performance

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

为什么一个查询非常慢,但在类似的表上相同的查询在眨眼间运行

我有这个查询......运行速度非常慢(差不多一分钟):

select distinct main.PrimeId 
from PRIME main 
join   
( 
select distinct p.PrimeId   from PRIME p   
left  outer join ATTRGROUP a 
on p.PrimeId = a.PrimeId   or p.PrimeId = a.RelatedPrimeId    
where a.PrimeId is not null and a.RelatedPrimeId is not null  
) mem  
on main.PrimeId = mem.PrimeId
Run Code Online (Sandbox Code Playgroud)

PRIME表有18k行,并且在PrimeId上有PK.

ATTRGROUP表有24k行,在PrimeId上有复合PK,col2,然后是RelatedPrimeId,然后是cols 4-7.RelatedPrimeId上还有一个单独的索引.

查询最终返回8.5k行 - PRIME表上的PrimeId的不同值,与ATTRGROUP表上的PrimeId或RelatedPrimeId匹配

我有相同的查询,使用ATTRADDRESS而不是ATTRGROUP.ATTRADDRESS具有与ATTRGROUP相同的密钥和索引结构.它只有11k行,不过可以肯定它是小的,但在这种情况下,查询运行大约一秒钟,并返回11k行.

所以我的问题是:

尽管结构相同,但查询如何在一个表上比另一个表慢得多.

到目前为止,我已经在SQL 2005上尝试了这一点,并且(使用相同的数据库,已升级)SQL 2008 R2.我们两个人独立地获得了相同的结果,将相同的备份恢复到两台不同的计算机.

其他详情:

  • 即使在慢速查询中,括号内的位也会在不到一秒的时间内运行
  • 执行计划中可能存在一些线索,我不明白.这是它的一部分,有可疑的320,000,000行操作:

在此输入图像描述 在此输入图像描述

但是,该表上的实际行数略多于24k,而不是320M!

如果我在括号内重构查询的一部分,那么它使用UNION而不是OR,因此:

select distinct main.PrimeId 
from PRIME main 
join   
( 
select distinct p.PrimeId   from PRIME p   
left  outer join ATTRGROUP …
Run Code Online (Sandbox Code Playgroud)

sql-server query-performance

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

如何强制oracle不使用索引

我有一个要求,我必须强制sql不要使用表上存在的特定索引.

例如,

create table t1(id varhcar2(10),data1 varchar2(3000));
create table t2(id varhcar2(10),data2 varchar2(3000));

create index id1 on t1(id);

select * from t1,t2 where t1.id=t2.id;
Run Code Online (Sandbox Code Playgroud)

我不能删除索引id1,也不能删除它,因为我没有权限.因此我想添加一些提示,以避免使用它..

是否有任何此类提示,或者是否有任何解决方法.

提前致谢

sql oracle hints query-performance

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

从条件较大的数据库中选择n个随机行

我有一个大约800万行的数据库,我想从中随机选择n行.首先,我在StackOverflowMSDN上的文章中阅读了流行的和类似的问题,但我觉得答案仍然不适合我的需求.

如果我想在没有额外条件的情况下随机选择一定百分比的行,那么所提供的解决方 但是我想要随机选择n行(例如最多5行),所有这些都匹配某个条件.

我的数据库包含包含词性,标签,引理和令牌等信息的单词.现在我想执行查询以选择5个与查询中的单词类似的随机单词(例如,给我5个类似于模糊的单词),这是通过仅查看具有相同词性和单词的值来确定的. levenshtein距离超过一定阈值.我在sql server中有一个函数可以计算levenshtein距离.

上述方法的问题在于它们要么必须遍历所有记录并计算levenshtein距离(这需要花费很多时间!),或者它们只能让我选择百分比而不是n行.

一个运行得很好的查询是:

SELECT DISTINCT TOP 5 lower(Words.TOKEN) as LTOKEN, Words.LEMMA, TagSet.POS_Simplified, TagSet.TAG 
FROM Words JOIN TagSet on Words.TAG = TagSet.TAG 
WHERE NOT Words.LEMMA = 'monarchie' AND TagSet.POS_Simplified = 'noun' 
AND TagSet.TAG = 'NOM' AND NOT Words.TOKEN = 'monarchie'
AND [dbo].edit_distance('monarchie', Words.Token) > 0.5
Run Code Online (Sandbox Code Playgroud)

然而,只有顶部我总是得到相同的结果.我需要我的上衣是随机的.像使用NEWID()这样的方法将首先遍历整个数据库,然后随机选择,这不是我想要的行为,因为它们占用时间太长.

有没有人有想法在庞大的数据库上快速选择n个随机行?


编辑:

有人(不在StackOverflow上)可能为我提供了一个OPTION子句和fast关键字的解决方案,该关键字检索它找到的前n行.

使用OPTION(快5)我到目前为止获得了最佳性能(在800万行表上有10秒).我还将Levenshtein函数从SQL实现更改为ac#编写的库实现,这大大加快了性能.

Select top 5 * from (
SELECT DISTINCT lower(Words.TOKEN) as LTOKEN, Words.LEMMA, TagSet.POS_Simplified, TagSet.TAG 
FROM Words …
Run Code Online (Sandbox Code Playgroud)

sql sql-server random performance query-performance

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

DISTINCT与PARTITION BY对GROUPBY

我在我正在检查的应用程序中找到了一些SQL查询:

SELECT DISTINCT
Company, Warehouse, Item,
SUM(quantity) OVER (PARTITION BY Company, Warehouse, Item) AS stock
Run Code Online (Sandbox Code Playgroud)

我很确定这会得到与以下结果相同的结果:

SELECT
Company, Warehouse, Item,
SUM(quantity) AS stock
GROUP BY Company, Warehouse, Item
Run Code Online (Sandbox Code Playgroud)

在第一种方法中使用第一种方法是否有任何好处(性能,可读性,编写查询的额外灵活性,可维护性等)?

sql sql-server group-by distinct query-performance

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

Postgres Materialize导致删除查询性能不佳

我有一个DELETE查询,我需要在PostgreSQL 9.0.4上运行.我发现它是高性能的,直到它在subselect查询中遇到524,289行.

例如,在524,288,没有使用物化视图,成本看起来很不错:

explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN
(SELECT userID FROM table2 fetch first 524288 rows only);
                                                QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Delete  (cost=13549.49..17840.67 rows=21 width=6)
   ->  Index Scan using jslps_userid_nopt on table1  (cost=13549.49..17840.67 rows=21 width=6)
         Filter: ((NOT (hashed SubPlan 1)) AND (pointlevel = 0))
         SubPlan 1
           ->  Limit  (cost=0.00..12238.77 rows=524288 width=8)
                 ->  Seq Scan on table2  (cost=0.00..17677.92 rows=757292 width=8)
(6 rows)

但是,一旦我达到524,289,物化视图就会发挥作用,DELETE查询变得更加昂贵:

explain DELETE FROM table1 WHERE pointLevel = 0 AND userID NOT IN …

database postgresql materialized-views query-performance sql-delete

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

即使使用覆盖索引,也可以优化COUNT(DISTINCT)的缓慢

我们在MySql中有一个表有大约3000万条记录,以下是表结构

CREATE TABLE `campaign_logs` (
  `domain` varchar(50) DEFAULT NULL,
  `campaign_id` varchar(50) DEFAULT NULL,
  `subscriber_id` varchar(50) DEFAULT NULL,
  `message` varchar(21000) DEFAULT NULL,
  `log_time` datetime DEFAULT NULL,
  `log_type` varchar(50) DEFAULT NULL,
  `level` varchar(50) DEFAULT NULL,
  `campaign_name` varchar(500) DEFAULT NULL,
  KEY `subscriber_id_index` (`subscriber_id`),
  KEY `log_type_index` (`log_type`),
  KEY `log_time_index` (`log_time`),
  KEY `campid_domain_logtype_logtime_subid_index` (`campaign_id`,`domain`,`log_type`,`log_time`,`subscriber_id`),
  KEY `domain_logtype_logtime_index` (`domain`,`log_type`,`log_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
Run Code Online (Sandbox Code Playgroud)

以下是我的查询

我正在做UNION ALL而不是使用IN操作

SELECT log_type,
       DATE_FORMAT(CONVERT_TZ(log_time,'+00:00','+05:30'),'%l %p') AS log_date,
       count(DISTINCT subscriber_id) AS COUNT,
       COUNT(subscriber_id) AS total
FROM stats.campaign_logs USE INDEX(campid_domain_logtype_logtime_subid_index)
WHERE DOMAIN='xxx'
  AND …
Run Code Online (Sandbox Code Playgroud)

mysql sql aggregate-functions query-performance mysql-variables

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

PostGis最近邻查询

我想检索另一组点的给定范围内的所有点.比方说,找到距离任何地铁站500米范围内的所有商店.

我写了这个查询,这很慢,并且想要优化它:

SELECT DISCTINCT ON(locations.id) locations.id FROM locations, pois
WHERE pois.poi_kind = 'subway'
AND ST_DWithin(locations.coordinates, pois.coordinates, 500, false);
Run Code Online (Sandbox Code Playgroud)

我正在使用最新版本的Postgres和PostGis(Postgres 9.5,PostGis 2.2.1)

这是表元数据:

                                         Table "public.locations"
       Column       |            Type             |                       Modifiers
--------------------+-----------------------------+--------------------------------------------------------
 id                 | integer                     | not null default nextval('locations_id_seq'::regclass)
 coordinates        | geometry                    |
Indexes:
    "locations_coordinates_index" gist (coordinates)


                                      Table "public.pois"
   Column    |            Type             |                     Modifiers
-------------+-----------------------------+---------------------------------------------------
 id          | integer                     | not null default nextval('pois_id_seq'::regclass)
 coordinates | geometry                    |
 poi_kind_id | integer                     |
Indexes:
    "pois_pkey" PRIMARY KEY, btree (id)
    "pois_coordinates_index" gist (coordinates)
    "pois_poi_kind_id_index" …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgis nearest-neighbor query-performance

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

nginx $upstream_response_time 具体什么时候启动/停止

有谁知道具体的时钟何时$upstream_response_time开始和结束?

该文档似乎有点含糊:

记录从上游服务器接收响应所花费的时间;时间以秒为单位,精度为毫秒。多个响应的时间由逗号和冒号分隔,就像 $upstream_addr 变量中的地址一样。

还有一个$upstream_header_time值,它增加了更多的混乱。

  1. 我假设$upstream_connect_time连接建立后但在上游接受之前停止?

  2. 这之后包括什么$upstream_response_time

    • 等待上游接受所花费的时间?
    • 发送请求所花费的时间?
    • 发送响应头花费的时间?

performance nginx query-performance

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

内存优化表-INSERT比SSD慢

我已经观察到,将数据插入内存优化表比在5-SSD条带集上对基于磁盘的表进行等效的并行插入要慢得多。

--DDL for Memory-Optimized Table    
CREATE TABLE [MYSCHEMA].[WIDE_MEMORY_TABLE]
        (
        [TX_ID] BIGINT NOT NULL
        , [COLUMN_01] [NVARCHAR](10) NOT NULL
        , [COLUMN_02] [NVARCHAR] (10) NOT NULL
        --etc., about 100 columns
        --at least one index is required for Memory-Optimized Tables
        , INDEX IX_WIDE_MEMORY_TABLE_ENTITY_ID HASH (TX_ID) WITH (BUCKET_COUNT=10000000)
        )
        WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)

--DDL for Disk-Based Table
CREATE TABLE [MYSCHEMA].[WIDE_DISK_TABLE]
        (
        [TX_ID] BIGINT NOT NULL
        , [COLUMN_01] [NVARCHAR](10) NOT NULL
        , [COLUMN_02] [NVARCHAR] (10) NOT NULL
        --etc., about 100 columns
        --No indexes
        ) ON [PRIMARY] …
Run Code Online (Sandbox Code Playgroud)

sql-server performance query-performance memory-optimized-tables

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