标签: query-performance

在 Postgresql 中索引外键

像许多 Postgres 一样,n00bs我们有很多带有外键约束但未建立索引的表。在某些情况下,这不会对性能造成很大影响 - 但这需要进一步分析。

我已阅读以下文章:https://www.cybertec-postgresql.com/en/index-your-foreign-key/

并使用以下查询查找所有没有索引的外键:

SELECT c.conrelid::regclass AS "table",
       /* list of key column names in order */
       string_agg(a.attname, ',' ORDER BY x.n) AS columns,
       pg_catalog.pg_size_pretty(
          pg_catalog.pg_relation_size(c.conrelid)
       ) AS size,
       c.conname AS constraint,
       c.confrelid::regclass AS referenced_table
FROM pg_catalog.pg_constraint c
   /* enumerated key column numbers per foreign key */
   CROSS JOIN LATERAL
      unnest(c.conkey) WITH ORDINALITY AS x(attnum, n)
   /* name for each key column */
   JOIN pg_catalog.pg_attribute a
      ON a.attnum = x.attnum
         AND a.attrelid = c.conrelid …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing query-performance

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

该sql是否命中MySql复合索引?

我有一张表:student_homework,其复合索引之一是uk_sid_lsnid_version(student_id, lesson_id, curriculum_version, type)

student_homework    0   uk_sid_lsnid_version    1   student_id  A   100             BTREE       
student_homework    0   uk_sid_lsnid_version    2   lesson_id   A   100             BTREE       
student_homework    0   uk_sid_lsnid_version    3   curriculum_version  A   100             BTREE       
student_homework    0   uk_sid_lsnid_version    4   type    A   100             BTREE   
Run Code Online (Sandbox Code Playgroud)

现在我有一个 Sql: select * from student_homework where student_id=100 and type=1结果explain如下:

1   SIMPLE  student_homework        ref uk_sid_lsnid_version,idx_student_id_update_time uk_sid_lsnid_version    4   const   20  10.0    Using index condition
Run Code Online (Sandbox Code Playgroud)

执行计划是uk_sid_lsnid_version

我的问题是查询条件type在这里如何工作?数据库引擎是否扫描所有(缩小的)记录?根据我的理解,树形层次结构是:

              student_id 
               /       \
           lesson_id     lesson_id
            /                      \  
     curriculum_version          curriculum_version
       / …
Run Code Online (Sandbox Code Playgroud)

mysql composite-key query-performance

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

检查列中不同值的优化方法

我正在寻找一个答案,从一个列(约50k记录的表)我只需要检查该列是否至少有两个不同的值.

Select Count(Distinct ColumnA)
from tableX 
Run Code Online (Sandbox Code Playgroud)

上面的查询给了我输出,但它不是优化的方式,因为我只想要一个布尔的答案

即计数是否超过1或否?

另外,tableX中记录增加的数量会使查询性能恶化,我正在寻找与表记录计数无关的东西.任何帮助表示赞赏:)谢谢.

sql sql-server query-performance

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

SQL获取具有相同列A但不同B的记录

假设我们有以下表格meals:

| meal  | stars |
-----------------
| steak |   1   |
| steak |   2   |
| fish  |   4   |
| fish  |   4   |
| salad |   5   |

如何获得同一顿饭但不同星星的记录?我需要只有不同星星的记录.

上表的结果应如下:

| meal  | stars |
-----------------
| steak |   1   |
| steak |   2   |

我尝试过以下查询:

SELECT DISTINCT t1.*
FROM meals t1
INNER JOIN meals t2 ON t1.meal = t2.meal
AND t1.stars <> t2.stars;
Run Code Online (Sandbox Code Playgroud)

但它耗费了太多时间和一些明显的内存.

我桌子的实际大小是:

SELECT pg_size_pretty(pg_relation_size('table_name')); 
 pg_size_pretty 
----------------
 2295 MB

所以我需要拿出别的东西,我正在寻求你的帮助!

sql postgresql query-performance

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

是否值得将PRIMARY KEY从类型NVARCHAR切换到INT类型?

在我们的SQL SERVER 2008 R2数据库中,我们有一个COUNTRIES包含国家/地区的参照表.这PRIMARY KEY是一个nvarchar列:

create table COUNTRIES(
   COUNTRY_ID nvarchar(50) PRIMARY KEY,
   ... other columns
)
Run Code Online (Sandbox Code Playgroud)

主键包含"FR","GER","US","UK"等值.此表包含最大值.20行.

我们还有一个SALES包含销售数据的表格:

create table SALES(
    ID int PRIMARY KEY
    COUNTRY_ID nvarchar(50),
    PRODUCT_ID int,
    DATE datetime,
    UNITS decimal(18,2)        
    ... other columns
)
Run Code Online (Sandbox Code Playgroud)

此销售表包含一个名为的列COUNTRY_ID,也是类型nvarchar(不是主键).这个表要大得多,包含大约2000万行.

在我们的应用程序内部,当在SALES桌面上查询时,我们几乎每次都在过滤COUNTRY_ID.即使这样,执行大多数聚合查询也需要很长时间(即使有适当的索引)

我们正处于开发阶段,以提高SALES表上的查询性能.我的问题是:

是否值得将COUNTRY_ID类型nvarchar(50)转换为类型int如果列COUNTRY_ID在两个表中都转换为类型int,那么在加入两个表时我能期望更好的性能吗?

sql t-sql sql-server primary-key query-performance

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

Oracle 2索引在相同的列上但顺序不同

我在生产环境中有一个表,在表上有2个索引,索引中的列相同,但顺序相反.

DDL是

 - CREATE INDEX IND_1 ON ORDERS (STORE_ID,DIST_ID)  
 - CREATE INDEX IND_DL_1 ON ORDERS (DIST_ID,STORE_ID)
Run Code Online (Sandbox Code Playgroud)

这两个指数是不是基本相同.为什么有人会这样创建索引?反转或更改列位置是否在内部执行某些操作?

oracle oracle10g oracle11g database-performance query-performance

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

SQL中的多线程?

我有一个 SQL 查询

SELECT Column1, Column2, Column3, **ufn_HugeTimeProcessFunction**(Column1, Column2, @Param1) As Column4
From Table1
Run Code Online (Sandbox Code Playgroud)

这个ufn_HugeTimeProcessFunction函数针对大表(就行数而言)运行,并且后面有几个计算来返回值。

我是否能够强制 SQL 编译器在另一个线程(进程)中运行该函数?

编辑:基本上该函数从 3 个不同的数据库中获取数据。这就是为什么我打算“并行”运行它,而且不可能更改其他数据库上的索引

sql query-performance

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

增加Ms Access插入性能

我正在使用MS Access 2010,分为前端/后端; 在具有16+表的网络驱动器(WAN)上,其中一个用户(130万)主要用于用户信息,并且不会插入重量很少的其他表,每天最多可以接收2000多个表.

我已经能够优化大多数读/选查询.虽然我的代码的一大块如下所示.这可以每天用于最多2000次迭代.

Do Until rec.EOF
    Dim vSomeId As Integer
    vSomeId = rec!SomeId

    'StrSQL = StrSQL & "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
        '"VALUES(" & vTransportationId & ", " & vSomeId & ");"

    StrSQL = "INSERT INTO TransportationDetails ( TransportationId, SomeId)" & _
        "VALUES(" & vTransportationId & ", " & vSomeId & ");"

    DoCmd.SetWarnings False
    DoCmd.RunSQL (StrSQL)
    DoCmd.SetWarnings True


    rec.Edit
    rec!SomeBoolean = rec!SomeOtherBoolean 
    rec.Update
    rec.MoveNext
Loop
Run Code Online (Sandbox Code Playgroud)

我的目标是减少调用db …

sql ms-access insert ms-access-2010 query-performance

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

为什么搜索词的细微变化会使查询变慢?

我在PostgreSQL(9.5.1)中有以下查询:

select e.id, (select count(id) from imgitem ii where ii.tabid = e.id and ii.tab = 'esp') as imgs,
 e.ano, e.mes, e.dia, cast(cast(e.ano as varchar(4))||'-'||right('0'||cast(e.mes as varchar(2)),2)||'-'|| right('0'||cast(e.dia as varchar(2)),2) as varchar(10)) as data,
 pl.pltag, e.inpa, e.det, d.ano anodet, coalesce(p.abrev,'')||' ('||coalesce(p.prenome,'')||')' determinador, d.tax, coalesce(v.val,v.valf)||' '||vu.unit as altura,
 coalesce(v1.val,v1.valf)||' '||vu1.unit as DAP, d.fam, tf.nome família, d.gen, tg.nome gênero, d.sp, ts.nome espécie, d.inf, e.loc, l.nome localidade, e.lat, e.lon
from esp e
left join det d on e.det = d.id
left join tax tf …
Run Code Online (Sandbox Code Playgroud)

postgresql performance pattern-matching query-performance postgresql-performance

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

Azure表存储查询性能

如果您知道确切的分区键和RowKey,那么表存储查询的性能会有很大差异吗?

我们使用RowKey的日期时间并获取最新的条目,我们检索一天的所有内容,然后在代码中对其进行排序.

PartitionKey eq '123456' and RowKey ge '20170713000000000' and RowKey le '20170714000000000' 
Run Code Online (Sandbox Code Playgroud)

这会从表存储中检索记录更快吗?

PartitionKey eq '123456' and RowKey eq '20170713101000000' 
Run Code Online (Sandbox Code Playgroud)

azure query-performance azure-table-storage

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