标签: query-optimization

T-SQL查询性能难题:为什么使用变量会产生影响?

当我做出看似无关紧要的变化时,我正在尝试优化复杂的SQL查询并获得截然不同的结果.

例如,运行需要336毫秒:

Declare @InstanceID int set @InstanceID=1;
With myResults as (
    Select 
        Row = Row_Number() Over (Order by sv.LastFirst), 
        ContactID
    From DirectoryContactsByContact(1) sv 
    Join ContainsTable(_s_Contacts, SearchText, 'john') fulltext on (fulltext.[Key]=ContactID)
    Where IsNull(sv.InstanceID,1) = @InstanceID
    and len(sv.LastFirst)>1
) Select * From myResults Where Row between 1 and 20;  
Run Code Online (Sandbox Code Playgroud)

如果我用硬编码的数字替换@InstanceID,则需要超过13秒(13890毫秒)才能运行:

Declare @InstanceID int set @InstanceID=1;
With myResults as (
    Select 
        Row = Row_Number() Over (Order by sv.LastFirst), 
        ContactID
    From DirectoryContactsByContact(1) sv 
    Join ContainsTable(_s_Contacts, SearchText, 'john') fulltext on (fulltext.[Key]=ContactID)
    Where IsNull(sv.InstanceID,1) = 1 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server query-optimization

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

SQL Server有任何查询优化工具吗?

是否有任何工具可以为SQL Server 2005及更高版本执行查询优化?

我搜索过,没找到任何东西.

您有什么推荐的吗?

如果这个问题重复,你可以关闭它,但我没有看到任何类似的东西

sql-server query-optimization

12
推荐指数
3
解决办法
5万
查看次数

是否有针对MongoDB Linq的"解释查询"?

有没有办法.explain()在Linq查询上运行或等效?我想知道

  • 实际JSON查询的文本
  • .explain()(使用的索引等)的输出
  • 拥有查询的执行时间也很好

c# linq query-optimization mongodb mongodb-.net-driver

12
推荐指数
2
解决办法
7338
查看次数

MySQL在哪里不是非常慢

下面是存储过程中的SQL语句(为简洁而截断):

SELECT * 
FROM item a 
WHERE a.orderId NOT IN (SELECT orderId FROM table_excluded_item);
Run Code Online (Sandbox Code Playgroud)

这个陈述需要30秒左右!但是,如果我删除内部SELECT查询,它将降至1秒.table_excluded_item并不是很大,但我怀疑内部查询的执行速度超过了它的需要.

有更有效的方法吗?

mysql sql query-optimization

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

替代于innodb的COUNT以防止表扫描?

我设法将一个符合我需要的查询放在一起,虽然比我希望的更复杂.但是,对于表的大小,查询比它应该更慢(0.17s).基于EXPLAIN下面提供的原因是因为在表上有一个表扫描,meta_relationships因为它COUNT在引擎的WHERE子句中innodb.

查询:

SELECT
posts.post_id,posts.post_name,
GROUP_CONCAT(IF(meta_data.type = 'category', meta.meta_name,null)) AS category,
GROUP_CONCAT(IF(meta_data.type = 'tag', meta.meta_name,null)) AS tag
FROM posts
RIGHT JOIN meta_relationships ON (posts.post_id = meta_relationships.object_id)
LEFT JOIN meta_data ON meta_relationships.meta_data_id = meta_data.meta_data_id
LEFT JOIN meta ON meta_data.meta_id = meta.meta_id
WHERE meta.meta_name = computers AND meta_relationships.object_id 
NOT IN (SELECT meta_relationships.object_id FROM meta_relationships
        GROUP BY meta_relationships.object_id HAVING count(*) > 1)
GROUP BY meta_relationships.object_id
Run Code Online (Sandbox Code Playgroud)

此特定查询选择仅包含该computers类别的帖子.的目的count > 1是为了排除包含职位computers/hardware, …

mysql join count query-optimization

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

来自Joel Spolsky文章的SQL问题

来自Joel Spolsky 关于漏洞抽象的 文章:

[C]某些SQL查询比其他逻辑上等效的查询慢几千倍.一个着名的例子是,如果你指定"a = b和b = c和a = c",那么某些SQL服务器要比你只指定"where a = b和b = c"那样快得多,即使结果集也是如此是一样的.

有谁知道这个细节?

sql query-optimization

11
推荐指数
2
解决办法
3148
查看次数

查询中列的顺序是否重要?

从MySQL表中选择列时,性能会受到选择列的顺序与表中的顺序相比的影响(不考虑可能覆盖列的索引)吗?

例如,您有一个包含行uid,name,bday的表,并且您具有以下查询.

SELECT uid, name, bday FROM table
Run Code Online (Sandbox Code Playgroud)

MySQL是否以不同的方式查看以下查询,从而导致任何类型的性能损失?

SELECT uid, bday, name FROM table
Run Code Online (Sandbox Code Playgroud)

mysql sql query-optimization

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

Mysql使用通配符提高搜索性能(%%)

以下是我用于通过电子邮件搜索某人的查询

  SELECT *
    FROM phppos_customers
    JOIN phppos_people ON phppos_customers.person_id = phppos_people.person_id
   WHERE deleted = 0
     AND email LIKE '%f%'
ORDER BY email ASC
Run Code Online (Sandbox Code Playgroud)

在"电子邮件"上添加索引会加快查询速度吗?

mysql sql indexing query-optimization

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

2gb表有1000万行,后期分页选择很慢

我在MySQL中有1000万行表,2 GB数据选择IN LIFO格式数据很慢

表引擎是=InnoDB

table有一个主键和一个唯一键

SELECT * FROM link LIMIT 999999 , 50;
Run Code Online (Sandbox Code Playgroud)

我如何提高表的性能.?

表结构

id  int(11) NO  PRI NULL    auto_increment
url varchar(255)    NO  UNI NULL    
website varchar(100)    NO      NULL    
state   varchar(10) NO      NULL    
type    varchar(100)    NO      NULL    
prio    varchar(100)    YES     NULL    
change  varchar(100)    YES     NULL    
last    varchar(100)    YES     NULL
Run Code Online (Sandbox Code Playgroud)

注意: SELECT * FROM link LIMIT 1 , 50;正在采取,.9ms但目前的SQL正在花费1000ms100倍的时间

mysql sql query-optimization

11
推荐指数
2
解决办法
1623
查看次数

为什么查询优化器选择完全不同的查询计划?

让我们在SQL Server 2016中有下表

-- generating 1M test table with four attributes
WITH x AS 
(
  SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n)
), t1 AS
(
  SELECT ones.n + 10 * tens.n + 100 * hundreds.n + 1000 * thousands.n + 10000 * tenthousands.n + 100000 * hundredthousands.n as id  
  FROM x ones,     x tens,      x hundreds,       x thousands,       x tenthousands,       x hundredthousands
)
SELECT  id,
        id % 50 predicate_col,
        row_number() over (partition by id % 50 order by id) join_col, …
Run Code Online (Sandbox Code Playgroud)

sql sql-server query-optimization

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