相关疑难解决方法(0)

如何删除重复的行?

从相当大的SQL Server表中删除重复行的最佳方法是什么(即300,000多行)?

当然,由于RowID身份字段的存在,行不会是完美的重复.

MyTable的

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server duplicates

1254
推荐指数
31
解决办法
118万
查看次数

如何以多次通过关系过滤SQL结果

假设我有表student,club以及student_club:

student {
    id
    name
}
club {
    id
    name
}
student_club {
    student_id
    club_id
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何找到足球(30)和棒球(50)俱乐部的所有学生.
虽然这个查询不起作用,但它是我迄今为止最接近的事情:

SELECT student.*
FROM   student
INNER  JOIN student_club sc ON student.id = sc.student_id
LEFT   JOIN club c ON c.id = sc.club_id
WHERE  c.id = 30 AND c.id = 50
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql relational-division sql-match-all

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

MySQL"IN"运算符的性能(大?)数值

我最近一直在试验Redis和MongoDB,看起来通常情况下你会在MongoDB或Redis中存储一组id.因为我在询问MySQL IN运算符,所以我会坚持使用Redis来解决这个问题.

我想知道在IN运算符中列出大量(300-3000)id的性能如何,看起来像这样:

SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
Run Code Online (Sandbox Code Playgroud)

想象一下像产品类别表这样简单的东西,你通常可以将它们加在一起以获得某个类别产品.在上面的示例中,您可以看到在Redis()中的给定类别下,我返回ID为4的类别中的所有产品ID,并将它们放在运算符内的上述查询中.category:4:product_idsSELECTIN

这是多么高效?

这是"依赖"的情况吗?或者是否有一个具体的"这是(不)可接受的"或"快速"或"慢"或者我应该添加LIMIT 25,还是没有帮助?

SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 3000)
LIMIT 25
Run Code Online (Sandbox Code Playgroud)

或者我应该修剪Redis返回的产品ID数组,将其限制为25,并且只将25个id添加到查询而不是3000并且LIMIT从查询内部将其添加到25?

SELECT id, name, price
FROM products
WHERE id IN (1, 2, 3, 4, ...... 25)
Run Code Online (Sandbox Code Playgroud)

任何建议/反馈非常感谢!

mysql sql performance operators

79
推荐指数
5
解决办法
4万
查看次数

MySQL"IN"查询子查询非常慢,但显式值快

我有一个MySQL查询(Ubu 10.04,Innodb,Core i7,16Gb RAM,SSD驱动器,MySQL params优化):

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')
Run Code Online (Sandbox Code Playgroud)

表em_link_data有大约7百万行,em_link有几千行.此查询大约需要18秒才能完成.但是,如果我替换子查询的结果并执行此操作:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);
Run Code Online (Sandbox Code Playgroud)

那么查询将在不到1毫秒的时间内运行.子查询单独运行不到1毫秒,列linkid被索引.

如果我将查询重写为连接,也不到1毫秒.为什么"IN"查询的子查询速度如此之慢以及为什么这么快的值?我无法重写查询(购买软件)所以我希望有一些调整或提示来加速这个查询!任何帮助表示赞赏.

mysql query-optimization

20
推荐指数
3
解决办法
2万
查看次数

MySQL中的MINUS运算符?

我有一些表格,我收到电子邮件.而且我不想在桌面上收到电子邮件tbl_unsubscribe.我写的查询如下:

SELECT cand_email FROM tbl_cand_data
UNION
SELECT emp_email FROM tbl_emp_data
UNION
SELECT email FROM tbl_uptade_list
UNION
SELECT feed_email FROM tbl_feedback
UNION
SELECT admin_email FROM tbl_admin_emails    
Run Code Online (Sandbox Code Playgroud)

但我收到语法错误.是MINUS运营商无效为MySQL?

php mysql

15
推荐指数
2
解决办法
3万
查看次数

此SELECT查询需要180秒才能完成

更新:

只是在更加明显的地方提及它.当我将IN更改为=时,查询执行时间从180下降到0.00008秒.可笑的速度差异.


此SQL查询需要180秒才能完成!怎么可能?有没有办法优化它更快?

SELECT IdLawVersionValidFrom 
FROM question_law_version 
WHERE IdQuestionLawVersion IN 
  (
  SELECT MAX(IdQuestionLawVersion) 
  FROM question_law_version 
  WHERE IdQuestionLaw IN 
    (
    SELECT MIN(IdQuestionLaw) 
    FROM question_law 
    WHERE IdQuestion=236 AND IdQuestionLaw>63
    )
  )
Run Code Online (Sandbox Code Playgroud)

每个表中只有大约5000行,所以它不应该这么慢.

mysql sql select

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

内连接和in()子句的性能在哪里?

我可以为这些查询得到相同的结果,但哪一个是最快,最有效的?

在()或内部连接的位置?

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
INNER JOIN users
ON `stats`.`userid` = `users`.`userid` 
WHERE `users`.`nick` =  '$nick'

ORDER BY `statoylar`.`sumpoint` DESC  limit 0,10
Run Code Online (Sandbox Code Playgroud)

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
WHERE userid
IN (
SELECT userid
FROM  `users` 
WHERE  `users`.`nick` =  '$nick'
)
ORDER BY `stats`.`sumpoint` DESC  limit 0,10
Run Code Online (Sandbox Code Playgroud)

mysql sql inner-join

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

MySQL为多列选择语句DISTINCT

我目前正在尝试构建一个有点棘手的MySQL Select语句.这是我想要完成的:

我有这样一张桌子:

data_table

uniqueID      stringID          subject
  1             144           "My Subject"
  2             144           "My Subject - New"
  3             144           "My Subject - Newest"
  4             211           "Some other column"
Run Code Online (Sandbox Code Playgroud)

基本上,我想要做的是能够SELECT/GROUP BY stringID(stringID是线程化的图片)而不是重复.此外,我想选择最近的stringID行(在上面的例子中是uniqueID 3).

因此,如果我要查询数据库,它将返回以下内容(最新的uniqueID位于顶部):

uniqueID   stringID    subject
 4          211        "Some other column"  
 3          144        "My Subject - Newest" //Notice this is the most recent and distinct stringID row, with the proper subject column.
Run Code Online (Sandbox Code Playgroud)

我希望这是有道理的.谢谢你的帮助.

mysql select greatest-n-per-group

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

MYSQL WHERE-IN子查询永远运行

我有一个MySQL表.我们称之为小部件.Widget表有3个字段:id,type_idname.在一个查询中,我希望获得与名为"doodad"的Widget 共享type_id的所有小部件.我写了2个查询:

  1. 给我一个名为'doodad'的小部件的type_id.
  2. 给我带有type_id的所有小部件.

这有效.每个查询,独立地实现其目标.

但是当我将它们组合成一个嵌套查询时,它会永远运行,无限循环样式.它看起来像这样:

SELECT * FROM widgets WHERE type_id IN  (
    SELECT type_id FROM widgets WHERE name = 'doodad'
);
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下?是因为我正在编写一个在同一个表上运行两次的嵌套查询吗?

小轮子,为什么你要旋转?

mysql nested

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

SQL固定值IN()与INNER JOIN性能

在回答这个SQL问题时,我遇到一个声明,即固定值IN()运算符比INNER JOIN使用相同内容慢得多,以至于最好为值创建临时表并加入它们.它是真的(通常,使用MySQL,任何其他SQL引擎),如果是 - 为什么?直观地说,IN应该更快 - 你将潜在匹配与已经在内存中并且需要格式的固定值集进行比较,而使用JOIN,你必须查阅索引,可能从磁盘加载数据,并执行IN可能不需要的其他操作.我错过了重要的事吗?

请注意,与这个问题不同,它有很多重复,我说的是IN()有固定的值集,而不是子查询.

mysql sql

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