我对mysql不是很了解。所以如果这是个愚蠢的问题请原谅。
我今天接到了一个来自我的DBA的电话,我的应用程序创建的临时表数量激增。
但我没有显式地创建任何临时表。
在故障排除后,我们发现每次在子查询中使用文本colomn时,都会创建一个临时表。
作为开发人员,使用子查询和文本列创建临时表使我感到困惑。
我的问题是,作为开发人员,我如何理解查询何时会创建临时表(在后台)。
我做了一些搜索,发现我可以做一些类似的事情
show GLOBAL status like 'created_tmp_disk_tables'
但它告诉我什么呢?如何知道我的查询是否导致了临时表。
我有一个大表all_records,有1亿条记录和许多列。我希望根据多列的耗时操作将大约3000万条记录插入到另一个表records_not_used_now中(在下面的查询中,这些操作被命名为f(n) )。然后从原始表all_records中删除这些记录。
查询如下:
insert into records_not_used_now
select * from all_records where f(n) > 0;
delete from all_records where f(n) > 0;
然而,由于f(n) >0的判断要花费计算时间,我不想做两次。MySQL中是
我重构了一个项目,并希望尝试PostgreSQL而不是MySQL。现在我想迁移一些表的表内容。
问题是,当我使用像这样的select查询时(不用担心名称,只是一个例子)
SELECT id AS id_x, name AS name_x, name2 AS name2_x
我想导出表数据并将其导入MySQL。问题是,INSERT INTO的语法在MySQL和PostgreSQL中是不同的。我不想导出整个表,因为我还更改了结构的某些部分,试图使它更具表现力等等。所以我只想得到表数据,但是我需要那些AS x,因为列的名称已经改变了。
我已经找到了关于这个主题的几个链接。
我可以使用mysqldum
我们使用实体框架和.Net连接器在MySQL中编写了一个应用程序。但有时查询在应用程序中无法执行,我们不知道原因。数据库安装在Debian服务器上。
我们在日志文件中显示以下消息:
System.Data.EntityCommandExecutionException: Er is een fout opgetreden tijdens het uitvoeren van de opdrachtdefinitie. Zie de interne uitzondering voor details. ---> MySql.Data.MySqlClient.MySqlException: I
我有一个很大的表,里面基本上是日志条目。对于我的大多数查询,我需要一个包含最新条目的表,因此我从以下查询创建了一个“视图”:
SELECT t1.store_id, t1.code_id, t1.working, t1.expiration, t1.details, t1.price
FROM code_stores t1
LEFT OUTER JOIN code_stores t2
ON (t1.store_id = t2.store_id AND t1.code_id = t2.code_id AND t1.id < t2.id)
WHERE t2.s
我使用的软件使用的是MySQL服务器(版本5.0.52)。其中一些数据库是动态创建的,我需要列出这些数据库的名称(标准是包含2个具有不同特定名称的表的数据库)。因此,我在information_schema上使用mysql查询来查找我需要的内容:
SELECT distinct T.table_schema
FROM information_schema.`TABLES` T
inner join information_schema.`TABLES` T2
on T2.table_schema = T.table_schema
where T.table_schema like
假设你有这样的查询..。
SELECT T.TaskID, T.TaskName, TAU.AssignedUsers
FROM `tasks` T
LEFT OUTER JOIN (
SELECT TaskID, GROUP_CONCAT(U.FirstName, ' ',
U.LastName SEPARATOR ', ') AS AssignedUsers
FROM `tasks_assigned_users` TAU
INNER JOIN `users` U ON (
我使用的是mySQL InnoDB表。用php脚本查询Mysql数据库。当用户选择特定表中的一条记录时,我想锁定此记录,并只允许其他用户读取进程。所以我试着用
SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
所以我的问题是,当用户B尝试选择相同的记录时,如何知道该记录被锁定,当用户A尝试更新记录时,如何授权该操作。
感谢你的帮助
我有一个group-by查询,当涉及到索引,连接,发送结果等时,它非常快。不幸的是,当我分析它时,mysql花了99.6%的时间“复制到临时表”。我不知道如何才能让mysql自己表现得更好。
group by查询实质上是查找系统中前20个标记的实体数量。我在这个查询的基础上过滤掉用户选择的标签,实质上缩小了字段的范围。当他们选择一个新标签时,查询性能会显著提高。如果他们选择2个或3个标签,查询会非常快地找到具有这2个或3个标签的实体数量,再加上紧随其后的最受欢迎的标签。
本质上,性能问题是当没有选择标签时,或者选择了1个标签时。解决这个问题的最佳方法是什么?
1)内存缓存,比如ehcache?
有没有办法在MySQL中执行以下查询?
UPDATE url_source_wp
SET url_source_wp.hash = "ASDF"
WHERE url_source_wp.url IN (SELECT
url_source_wp.url
FROM url_source_wp
LEFT OUTER JOIN url_done_wp
我正在尝试用select查询的结果更新第三个表--我知道如何在mysql上这样做,但是access使人发疯:)
我有以下声明:
UPDATE ceilings LEFT JOIN
(SELECT ceiling_number AS cc, Count(type=3) AS st FROM ceiling INNER JOIN materials ON ceiling.material_number = materials.id GROUP BY ceiling.ceiling_number) AS q
ON q.cc=ceilings.ceilingid SET ceilings.stair
我正在MySQL5.1上进行主/从复制,并使用mysql proxy 0.8.x进行读/写拆分
除了临时表之外,它工作得很好。MySQL抛出一个错误,说明临时表不存在。
以下是主服务器的查询日志:
CREATE TEMPORARY TABLE IF NOT EXISTS sh ( ad_id MEDIUMINT( 8 ) UNSIGNED NOT NULL, score float , INDEX ( `ad_id` ), INDEX ( `score` )) ENGINE = MEMORY
INSERT INTO sh
我在mysql中遇到了一些小问题。
我有一个包含100k+行的表。表中有字段: userid,id
我需要通过userid获取id。
用户30k ~30k
我使用sql:
select * from table where userid in (....)
但是当userid ~ 30k+ mysql非常慢的时候..更多10秒
我用临时表解决了这个问题:
1)创建临时表_temp (id int,primary (id) 2)用userid数据填充表(30k+) 3)选择:
select c.id from _temp t1 left join contacts c on t1.id=c.us