标签: query-optimization

为什么PHP版本的运行速度比MySQL快

我有两个非常大的表要合并,所以我一直在尝试优化更新速度.我注意到在PHP中进行部分更新会大大加快,所以我认为这意味着我没有正确地使用MySQL.

我已经简化了问题,试图缩小范围......

GRID_TABLE                                  POSTCODE_TABLE
idNo, lat,  lng,  nearestPostcode           postcode,  lat,   lng
________________________________            _____________________
1     57.1  -2.3  -                         AB12 3BA   56.3  -2.5
2     56.8  -1.9  -                         AB12 1YA   56.2  -2.3
. . .                                       . . .

(200 entries)                               (35,000 entries)

我想使用纬度(lat)和经度(lng)使用来自POSTCODE_TABLE的nearestPostcode更新GRID_TABLE,以找到每个网格点最近的邮政编码...

update grid_table set nearestPostcode = (
    select postcode from postcode_table 
    where lat > grid_table.lat -0.0037 and lat < grid_table.lat +0.0037 
        and lng > grid_table.lng -0.0068 and lng < grid_table.lng +0.0068
    order by POW(lat - grid_table.lat,2) + POW((lng - grid_table.lng) *0.546,2) …
Run Code Online (Sandbox Code Playgroud)

php mysql query-optimization

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

mysql - 如何在没有索引的情况下运行查询

我希望比较索引并进一步优化我的代码。我想要做的是强制查询在没有索引的情况下运行,以便我可以看到它产生了什么不同。是否有可能做到这一点?

mysql indexing query-optimization database-indexes

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

避免命名用户存储过程SP%或SP_%

具有前缀SP(而不是SP_)的用户存储过程是否通过查看主数据库(类似于名为SP_的用户SP)具有较差的性能,或者它是否存在存储过程存在的DB,因为它缺少下划线?

sql-server stored-procedures query-optimization

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

PostgreSQL 在一个查询中获取事件发生的每日、每周和每月平均值

目前我有这个相当大的查询

  1. 通过获取count()按事件名称和日期分组的事件,将每日、每周、每月计数聚合到中间表中。
  2. 通过avg()按事件分组来选择每个中间表的平均计数,对结果进行联合,并且因为我想为每天、每周、每月设置一个单独的列,将填充值 0 放入空列中。
  3. 然后我对所有列求和,0 基本上充当空操作,这给我每个事件的单个值。

查询虽然很大,但我觉得我正在做很多重复的工作。有什么办法可以更好地执行此查询或使其更小吗?我以前没有真正做过这样的查询,所以我不太确定。

WITH monthly_counts as (
  SELECT
    event,
    count(*) as count
  FROM tracking_stuff
  WHERE
    event = 'thing'
    OR event = 'thing2'
    OR event = 'thing3'
  GROUP BY event, date_trunc('month', created_at)
),
weekly_counts as (
  SELECT
    event,
    count(*) as count
  FROM tracking_stuff
  WHERE
    event = 'thing'
    OR event = 'thing2'
    OR event = 'thing3'
  GROUP BY event, date_trunc('week', created_at)
),
daily_counts as (
  SELECT
    event,
    count(*) as count
  FROM tracking_stuff
  WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql analytics aggregate query-optimization

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

为什么 Postgresql 使用过滤器而不是索引?

我有ad_item包含以下列的postgresql表。

id | name | remaining | created_at
Run Code Online (Sandbox Code Playgroud)

然后我的剩余指数小于或等于 300。

create index remaining_index on ad_item using btree(id) where remaining <= 300
Run Code Online (Sandbox Code Playgroud)

但是当我做explain analyze我的查询时。

explain analyze select id from ad_item where remaining <= 300
Run Code Online (Sandbox Code Playgroud)

它向我展示了以下内容。

Seq Scan on ad_item  (cost=0.00..2.06 rows=1 width=4) (actual time=0.010..0.013 rows=1 loops=1)
  Filter: (remaining <= '300'::numeric)
  Rows Removed by Filter: 4
Planning time: 0.115 ms
Execution time: 0.026 ms
Run Code Online (Sandbox Code Playgroud)

为什么不使用我的remaining_index?那个索引是多余的吗?

谢谢。

postgresql query-optimization

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

使用 GROUP BY 的 MySQL 查询非常慢

我有一个使用以下架构的数据库:

CREATE TABLE IF NOT EXISTS `sessions` (
  `starttime` datetime NOT NULL,
  `ip` varchar(15) NOT NULL default '',
  `country_name` varchar(45) default '',
  `country_iso_code` varchar(2) default '',
  `org` varchar(128) default '',
  KEY (`ip`),
  KEY (`starttime`),
  KEY (`country_name`)
);
Run Code Online (Sandbox Code Playgroud)

(实际表包含更多列;我只包含我查询的列。)引擎是 InnoDB。

正如您所看到的,有 3 个索引 - ipstarttimecountry_name

该表非常大 - 它包含大约 150 万行。我正在对其运行各种查询,尝试提取一个月的信息(2018 年 8 月,在下面的示例中)。

像这样的查询

SELECT
  UNIX_TIMESTAMP(starttime) as time_sec,
  country_iso_code AS metric,
  COUNT(country_iso_code) AS value
FROM
  sessions
WHERE
  starttime >= FROM_UNIXTIME(1533070800) AND
  starttime <= FROM_UNIXTIME(1535749199)
GROUP BY …
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization aggregate-functions

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

SQL解析导致Oracle延迟响应

我有一个Java Web服务方法getCardInformation,可Oracle使用从数据库获取数据JDBC。每秒大约进行300个呼叫。

Java将其称为pl / sql函数:

PROCEDURE GET_CARDS_BY_ID(p_card_id IN NUMBER
                         ,o_result  OUT VARCHAR2) IS
BEGIN

  SELECT 'some data'
    INTO o_result
    FROM 'my complicated SQL' c
   WHERE c.card_id = p_card_id;

END GET_CARDS_BY_ID;
Run Code Online (Sandbox Code Playgroud)

通常SQL Select statement/procedure在30毫秒内返回结果,但有时有时需要20秒钟以上,而所有其他线程(调用)都在等待此延迟的调用。尽管这些调用没有相互连接,但是它们在SQL Select statement不同的输入参数下运行相同。所有参数都是使用Java从Java设置的bind variables

在延迟期间,我们选择了活动会话并获得了很多游标:引脚S等待X

    SELECT DISTINCT a.*, s.*
  FROM V$ACTIVE_SESSION_HISTORY a
      ,v$sql                    s
 WHERE a.sql_id = s.sql_id
   AND blocking_session IS NOT NULL
   AND a.sample_time > sysdate - 1
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我们通过添加hint到中解决了该问题Select。我们认为,在此延迟期间,Oracle试图对此进行解析Select …

sql oracle performance plsql query-optimization

7
推荐指数
0
解决办法
176
查看次数

为什么 Postgres EXPLAIN ANALYZEexecution_time 与我运行实际查询时不同?

我正在使用数据库客户端来测试。

使用EXPLAIN ANALYZE

Hash Join  (cost=5.02..287015.54 rows=3400485 width=33) (actual time=0.023..1725.842 rows=3327845 loops=1)
  Hash Cond: ((fact_orders.financial_status)::text = (include_list.financial_status)::text)
  CTE include_list
    ->  Result  (cost=0.00..1.77 rows=100 width=32) (actual time=0.003..0.004 rows=4 loops=1)
          ->  ProjectSet  (cost=0.00..0.52 rows=100 width=32) (actual time=0.002..0.003 rows=4 loops=1)
                ->  Result  (cost=0.00..0.01 rows=1 width=0) (actual time=0.000..0.000 rows=1 loops=1)
  ->  Seq Scan on fact_orders  (cost=0.00..240253.85 rows=3400485 width=38) (actual time=0.006..551.558 rows=3400485 loops=1)
  ->  Hash  (cost=2.00..2.00 rows=100 width=32) (actual time=0.009..0.009 rows=4 loops=1)
        Buckets: 1024  Batches: 1  Memory Usage: 9kB
        ->  CTE Scan on …
Run Code Online (Sandbox Code Playgroud)

sql postgresql query-optimization explain sql-execution-plan

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

为什么mysql解释分析不起作用?

除了拥有 mariadb 10.1.36-MariaDB 之外,我还收到以下错误。

EXPLAIN ANALYZE select 1
MySQL said: Documentation

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ANALYZE select 1' at line 1
Run Code Online (Sandbox Code Playgroud)

我还需要在这里做什么。我的 PHP 版本是 7.2.11。

php mysql query-optimization mariadb

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

SQL Server:聚集索引比等效的非聚集索引慢得多

设置

我将要描述的是在以下硬件上运行:

  • 磁盘:RAID5 中的 6 个 2TB 硬盘(带 1 个冗余驱动器)
  • CPU:英特尔至强 E5-2640 @ 2.4 GHz,6 核
  • 内存:64GB
  • SQL Server 版本:SQL Server 2016 开发人员

SQL Server Management Studio (SSMS) 和 sql server 实例都在此服务器上运行。所以所有的查询都是在本地执行的。此外,在执行任何查询之前,我总是运行以下命令以确保没有数据访问缓存在内存中:

DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)

问题

我们有一个包含大约 11'600'000 行的 SQL Server 表。在大计划中,不是一张特别大的桌子,但它会随着时间的推移而大大增加。

该表具有以下结构:

CREATE TABLE [Trajectory](
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [FlightDate] [date] NOT NULL,
  [EntryTime] [datetime2] NOT NULL,
  [ExitTime] [datetime2] NOT NULL,
  [Geography] [geography] NOT NULL,
  [GreatArcDistance] [real] NULL,
  CONSTRAINT [PK_Trajectory] PRIMARY KEY CLUSTERED ([Id])
)
Run Code Online (Sandbox Code Playgroud)

(为简单起见,排除了一些列,但它们的数量和大小非常小)

虽然没有那么多行,但由于[Geography]列的原因,该表占用了相当多的磁盘空间。此列的内容是 …

sql sql-server indexing performance query-optimization

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