我有一个包含7个字段的数据库,字段1是唯一的,其余的则不是。但是,字段2和3可能为空。我试图用csv文件中的信息更新数据库,以填充空值,但我无法让它工作。该字段可能为null,或者该字段可能已经包含该信息。
db=mdb.connect('localhost','username','password','db')
cur=db.cursor()
inputinfo=csv.reader(open('Insert.csv','r'),delimiter=',')
for row in
这是一场长达19个小时的噩梦。
我有一个非常大的查询,本质上需要连接几个表中的大型数据集。在进行连接之后,我需要用select语句中的数据更新原始表。SELECT语句超级快,而UPDATE语句超级慢。
这是select语句。
SELECT l.col1,
l.col2,
l.col3,
p.personid
FROM table1 p
LEFT JOIN table2 l ON (l.col1 = p.col1)
LEFT JOIN
(SELECT name,
col AS 'col2'
FROM tbl3
我在我的数据库上有这个查询,它基本上是拉出距离坐标10英里半径内的那些。
SELECT id
FROM business
WHERE ( coordinates!=''
AND getDistance('-2.1032155,49.1801863', coordinates)<10 )
AND id NOT IN ('6', '4118') ORDER BY rand() LIMIT 0,5
当我分析这个查询时,我得到这个: JOIN SIZE: 3956 (BAD) USINGI FILESOR
我有一个类似这样的查询:
SELECT * FROM tablename WHERE condition = 1 ORDER BY id LIMIT 1000;
id是主键。我有一个condition索引和一个id索引(我还没有在condition和id上添加一个综合索引)。此查询仅使用condition索引,而不使用id索引。
如果我explain查询,它只表示Using where。我以为它会说filesort。但是,由于这个查询是在不使用索引的情况下进行排序,所以它必须使用文件短。此外,此查询正在超时,这是它使用文件短的另一条线索。如果我在没有order by的情况下运行查询,它不会超时
我有一个问题,我的查询是Using filesort,即使字段是索引的。
这是我的问题:
EXPLAIN
SELECT u.name, u.surname, u.id
FROM rw_users u
ORDER BY u.created DESC
LIMIT 4
这是输出:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE u ALL 9 Using
我有一个表,我需要从该表中获取按字段降序排序的行。运行如下所示的EXPLAIN查询时:
EXPLAIN SELECT ... FROM table WHERE ... ORDER BY field DESC
我在Extra列中获得了Using where; Using filesort。所以我尝试创建一个DESC索引:
CREATE INDEX name ON table (field DESC);
但是当我再次运行EXPLAIN时,我在Extra列中得到了相同的Using where; Using filesort,并且性能几乎相同。
我做错了什么?
我有这样的疑问:
SELECT date(DATE_SAISIE) , count(DATE_SAISIE) as total
FROM appel_offre
GROUP BY date(DATE_SAISIE)
ORDER BY DATE_SAISIE
我在DATE_SAISIE上有索引
create index mi_date on appel_offre(DATE_SAISIE)
这是explain命令:
+----+-------------+-------------+-------+---------------+---------+---------+------+---
我需要获得列中有重复值的行。这是SQL:
select * from `match` where `match`.`homeTeam` in
(select `matchView`.`homeTeam` from `matchView`
group by `matchView`.`homeTeam` having (count(0) > 1))
order by `match`.`homeTeam`
它可以完成任务,但需要15秒。我能做些什么来提高它的速度
编辑:解释sql结果:
id select_type table type possible_keys
我有一个查询,运行时间大约为1.6秒,返回150Kish行。我已经从这个查询中构建了一个基于内存引擎的临时表,这个操作大约需要6.5秒。我仔细阅读了mysql站点上的大量文档,并对临时表上的索引进行了研究(有索引和没有索引时几乎没有任何区别),试图找到一些方法来提高表创建的性能。有没有人有关于配置选项的建议,可以加速创建内存中的临时表(或非临时表)?为了弄清楚我到底在寻找什么(我认为)是某种表配置选项,它可能会提高创建速度。我已经浏览了MySQL5.7站点上列出的大多数表,但似乎没有什么能改变在内存中创建临时/标准表所需的时间。
CREATE TEMPORARY TABLE
IF NOT E
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package filesort;
import java.io.File;
import java.util.Scanner;`enter code here`
import java.io.IOException;
impor
我有以下MySQL查询:
(SELECT c.Channel as name, count(*) as total_episode
FROM (
SELECT a.aid, a.vid
FROM videoItem v INNER JOIN aid2vid a USING(vid)
GROUP BY a.aid
) a1 INNER JOIN channelListingItem c USING(aid)
GROUP BY c.Channel
)
UNION
(SELECT c1.Channel as name, 0 as total_episod
下面是在mysql处理列表中具有10's "copying to tmp table"状态的慢速查询的解释输出。
explain SELECT distinct
(radgroupreply.groupname),
count(distinct (radusergroup.username)) AS users
FROM
radgroupreply
LEFT JOIN
radusergroup ON radgroupreply.groupname = radusergroup.groupname
WHERE
(ra
在一个简单但非常大的Innodb表中,我在列A上有一个惟一的索引,我希望获得一个按(整型)列A的顺序排列的(整型)列B的列表
非常简单的查询,我正在翻页浏览数百万条记录。
SELECT B FROM hugeTable ORDER BY A LIMIT 10000 OFFSET 500000
在速度非常快的服务器上,每次查询需要10秒?
Filesort: Yes Filesort_on_disk: Yes Merge_passes: 9
这对我来说没有任何意义,为什么它不能使用索引A呢?
Explain显示简单,没有可能的键和文件排序。
我们有一个数据库表,我们从旧代码中找到了一个奇怪的查询。我们无法真正解释,所以我们决定分析为什么会这样做。奇怪的是,结果是一样的,但性能非常有趣。
SELECT * FROM table WHERE column='97807dsad1' group by indexedColumn ORDER BY CreatedDate ASC;
SELECT * FROM (SELECT * FROM table WHERE column='978asdad' ORDER BY CreatedDate ASC) as thetable GROUP BY indexedC
为了启用slow_query_log,我一直在玩一些游戏,在启用general_log (1)之前,我一直没有得到任何结果,但我也会记录所有不需要的查询,这会导致性能问题。
有办法只记录缓慢的查询吗?
show variables like '%log%';
+-------------------------------------------+--------------------------------------------------------------------------------------------------------------+
| Var
在where子句中,我指定最多100个主键。
一个示例查询:
select product_id, max(date_created) AS last_order_date
from orders
where product_id=28906
or product_id=28903
or product_id=28897
or product_id=28848
or product_id=28841
or product_id=28839
or product_id=28838
为什么这样的查询会在表上出现"Using temporary;Using filesort“问题? Explain
SELECT `table`.*, COUNT(table.id) AS `count`
FROM `table`
LEFT JOIN `table2` ON table.id = table2.foreign_id
GROUP BY `table2`.`foreign_id`
ORDER BY table.`title` ASC
1 SIMPLE table ALL NULL NULL NULL NULL 305
我有一个包含列的表:
CREATE TABLE aggregates (
a VARHCAR,
b VARCHAR,
c VARCHAR,
metric INT
KEY test (a, b, c, metric)
);
如果我执行如下查询:
SELECT b, c, SUM(metric) metric
FROM aggregates
WHERE a IN ('a', 'couple', 'of', 'values')
GROUP BY b, c
ORDER BY b, c
查询耗时10秒
有什么聪明的方法可以避免在全文搜索过程中使用group by吗?
SELECT p.topic_id, min(p.post_id)
FROM forum_posts AS p
WHERE MATCH (p.post_text) AGAINST ('baby shoes' IN BOOLEAN MODE)
GROUP BY p.topic_id
LIMIT 20;
在本例中,它为匹配文本的唯一post_id获取最低的topic_ids。
为了找到最小值,这个组在一个百万行数据库中花费了600‘s,检查了大约50K行。
如果我去掉了分钟,但离开了小组,这是同样的慢,所以这是组
我有一个带有几个表的mySQL数据库。但是,一个表包含140万行af。我需要得到一个字段中值最高的50,000行。一个能统计来访者的领域。
SELECT uid, title, number, views
FROM ct
WHERE hidden = 0
AND deleted = 0
AND number > 0
AND status LIKE 'active'
order by views desc
limit 0, 50000
它非常慢。数据库是InnoDB,标题、数字和视图都是索引的。
我怎样才能加快选择的速度?
来自解释:
1 SIMPLE c
对于我使用的一个简单解析器,我有两个表
CREATE TABLE IF NOT EXISTS `parsers` (
`parser_id` int(11) NOT NULL AUTO_INCREMENT,
`last_used` datetime NOT NULL,
`engine_id` int(11) NOT NULL,
`job_id` varchar(20) DEFAULT NULL,
`notice` text NOT NULL,
PRIMARY KEY (`parser_id`),
KEY `last_used_2` (`last_used`,`par
我如何优化这个查询?模式:
mysql> show columns from transactionlog;
+---------------+-------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------
我有以下查询,它有点贵(当前为500ms):
SELECT * FROM events AS e, event_dates AS ed
WHERE e.id=ed.event_id AND ed.start >= DATE(NOW())
GROUP BY e.modified_datetime, e.id
ORDER BY e.modified_datetime DESC,e.created_datetime DESC
LIMIT 0,4
我一直在试图弄清楚如何加快速度,并注意到将ed.start >= DATE(NOW())更改为ed.start = DATE(NOW()
我有一个简单的表->
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
by_id INT UNSIGNED NOT NULL
posted_on INT UNSIGNED NOT NULL
我的表引擎是MyISAM。
我在by_id,posted_on,id上有一个名为combo1的多列索引
我运行这个查询->
EXPLAIN SELECT * FROM books
WHERE by_id = '1' AND posted_on = '0'
ORDER BY
我需要您的帮助,以优化查询,以避免使用“使用文件”。查询是:
SELECT name
FROM actor
WHERE actor_id IN (3333,1452,2587,3003,3044,3524,3700,7087,7088)
ORDER BY name ASC
解释结果如下:
1 SIMPLE actor range PRIMARY PRIMARY 2 9 Using where; Using filesort
============================================================
SQL
表:
CR
我正在尝试生成一个列表的所有用户的标签与他们关联的任务数量的计数… SELECT * FROM
( SELECT tags.tag_id, tags.tag_text, tags.type, task_tags.tag_id AS task_tag_id,
count(task_tags.tag_id) AS TaskCount
FROM tags
LEFT JOIN task_tags ON tags.tag_id = task_tags.tag_id
WHERE tags.user_id = 2
GROUP BY tag_id )
AS tem
我一次又一次地注意到,当我EXPLAIN使用GROUP BY子句进行查询时,我将filesort作为一个额外的条件。很久以前,我读过一篇关于在这些情况下使用GROUP BY NULL以避免文件短缺的建议,它确实消除了那种看起来令人讨厌的filesort条件。
我认为,如果没有ORDER BY子句,那么dbms只会呈现一个任意的顺序或任何最有效的命令,而不是通过某个需要文件短的神秘列进行排序。我觉得奇怪的是,我需要一个额外的方向,这基本上相当于说“不要做任何蠢事”。
我的问题是,为什么这甚至是必要的,并且添加ORDER BY NULL实际上有助于性能?
我想知道在MySQL中使用文件意味着什么?
explain select * from user order by user_id;
当我使用“order”时它就会出现。
1,SIMPLE,orderitems,,ALL,,,,,1,100,Using filesort
“使用文件”是额外的。谢谢大家!
谁能告诉我为什么这个查询没有使用我创建的索引idx_accessorieslinkid:
CREATE INDEX idx_accessorieslinkid ON `accessorieslink` (actionid);
我是索引的新手,正在尝试理解它们是如何工作的(以及为什么有时它们不是这样的!)
sql
SELECT action.actionid
FROM
ACTION
LEFT JOIN
(SELECT
SUM(accprice) AS accprice,
actionid
FROM
accessorieslink
G
我有下面的查询,需要3秒才能运行。
SELECT c.kpi_name as kpi ,count(*) as cnt ,c.only_date as date
FROM cellwise_performance c
WHERE c.kpi_name ='DL Cell Throughput (Mbps)'
AND c.only_date BETWEEN '2014-06-10' AND '2014-11-05' AND c.kpi_value>=5
GROUP BY c.kpi_name,month(c.only_
我有一个有两列的表,batch_id和study_id。这两列都有索引。我想从MySQL得到一个随机的行。
我最初写道:
SELECT * FROM alt_join_batch_study ORDER BY RAND() LIMIT 1
但事实证明这很慢。这是解释。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE alt_join_batch_study ALL NULL NULL NULL N
我有两个表,我需要从这两个表中选择一些连接的数据
SELECT f.*
FROM file_data f
JOIN subscriptions s ON f.uid = s.elementid
WHERE s.uid = 119762 AND f.private=0
ORDER BY f.date DESC
现在,即使对于一小部分数据,查询也会占用一秒钟的时间。这是由于在“订阅”上使用了“filesort”和“temporary”,这是由ORDER by f.date引起的(删除该条件会导致时间降到0.01s以下)
谁能告诉我如何加快查询速度?
下面是EXPLAIN的结果
id sel
问题与在两个表中保存列表数据和销售线索数据的列表站点有关。在查询列表和每个列表的销售线索总数时,添加ORDER BY后,结果会非常慢。如果没有ORDER BY,检索结果的速度会非常快。任何关于重构以下查询的建议或帮助都将是非常棒的!仅供参考,这里有20,000个列表和100,000个销售线索。
SELECT ls.*, IFNULL(ld.total_leads, 0) AS total_leads
FROM listing ls
LEFT JOIN (SELECT listing_id, COUNT(listing_id) AS total_leads
FROM
这个查询获取用户订阅上传的最新视频,运行速度非常慢,所以我重写了它来使用joins,但它并没有什么不同,在修改它之后,我发现删除ORDER by会使它运行得更快(然而它违背了查询的目的)。
查询:
SELECT vid. *
FROM video AS vid
INNER JOIN subscriptions AS sub ON vid.uploader = sub.subscription_id
WHERE sub.subscriber_id = '1'
AND vid.privacy = 0 AND vid.blocked <> 1 AND vid.conver
我有以下列的表用户。
id、名称、updated_at
使用explain plan查询
mysql> explain select * from users group by users.id order by users.updated_at desc limit 10;
+----+-------------+-------------+------+---------------+------+---------+------+--------+----------------+
| id | select_type | table | type | possible
我的SQL是
SELECT authors.*, COUNT(*) FROM authors
INNER JOIN resources_authors ON authors.author_id=resources_authors.author_id
WHERE
resource_id IN
(SELECT resource_id FROM resources_authors WHERE author_id = '1313')
AND authors.author_id != '1313'
GROUP BY authors
有没有什么方法可以优化这个查询,使其运行得更快。
下面是我的问题:
SELECT MAX(datum) AS maxdatum
FROM forumtext
GROUP BY id_forumtops
ORDER BY maxdatum DESC
LIMIT 10
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE forumtext index NULL