小编Rie*_*sio的帖子

为什么我的SQL查询失败?

我正在使用它从数据库中检索信息,查询总是会带来错误

这是我的查询:

SELECT * FROM users ORDER BY RAND() LIMIT '10'
Run Code Online (Sandbox Code Playgroud)

它总是在任一带来了错误ORDER BY RAND()LIMIT '10'.

出现这种情况的原因是什么?还有什么解决方案吗?

mysql random limit

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

将row_format更改为动态

什么是MySQL的语句更改row_formatdynamic

我不确定我应该怎么做(即使用information_schema或使用表格ALTER).

mysql

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

mysql解释不同服务器上的不同结果,同一查询,同一个数据库

经过大量的工作,我终于得到了一个相当复杂的查询,非常流畅地工作,并很快返回结果.

它在开发和测试方面运行良好,但现在测试速度已大大减慢.解释查询在开发上需要0.06秒并且在测试中大致相同,现在测试时间为7秒.

解释略有不同,我不确定为什么这将是dev的解释

-+---------+------------------------------+------+------------------------------
---+
| id | select_type | table      | type   | possible_keys           | key
 | key_len | ref                          | rows | Extra
   |
+----+-------------+------------+--------+-------------------------+------------
-+---------+------------------------------+------+------------------------------
---+
|  1 | PRIMARY     |  | ALL    | NULL                    | NULL
 | NULL    | NULL                         |    5 |
   |
|  1 | PRIMARY     | tickets    | ref    | biddate_idx             | biddate_idx
 | 7       | showsdate.bid,showsdate.date |   78 |
   |
|  2 | DERIVED     | shows      | ALL    | biddate_idx,latlong_idx | NULL …

mysql join sql-execution-plan

6
推荐指数
2
解决办法
3029
查看次数

MySQL用索引解释过滤列跳跃4,100

我的查询:

EXPLAIN EXTENDED SELECT  `artwork`.`id` ,  `artwork`.`added` 
FROM  `artwork` 
ORDER BY  `artwork`.`added` DESC 
LIMIT 0 , 6
Run Code Online (Sandbox Code Playgroud)

当我在"添加"上添加索引以避免使用filesort和使用index而不是解释的输出来自

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork ALL NULL NULL NULL NULL 302 100.00 Using filesort
Run Code Online (Sandbox Code Playgroud)

id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE artwork index NULL added 4 NULL 6 5033.33  
Run Code Online (Sandbox Code Playgroud)

而且我担心过滤的上升大约是4,100 - 我在Google上找不到什么filtered意思

mysql query-optimization sql-execution-plan

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

即使EXPLAIN显示良好的计划,MySQL也会加入慢速查询

我有以下场景:在MySQL数据库中,我有2个MyISAM表,一个有420万行,另一个有3.2亿行.以下是表的架构:

表1(4.2M行)

F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 varchar(40)
f3 varchar(40)
f4 varchar(40)
f5 varchar(40)
f6 smallint(6)
f7 smallint(6)
f8 varchar(40)
f9 varchar(40)
f10 smallint(6)
f11 varchar(10)
f12 tinyint(4)
f13 smallint(6)
f14 text
Run Code Online (Sandbox Code Playgroud)

表2(320M行)

F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 INTEGER UNSIGNED NOT NULL
Run Code Online (Sandbox Code Playgroud)

表2位于不同的数据库中,但我使用的是查询这两个表的存储过程.两个表之间的关系是Table1.F1可能最多约.Table2.F1(外键)中的100行匹配,并且将为这些匹配的键返回Table2.f2的值.我在表1上有一个索引IX1(f2(15),f3(10))和表2中的索引IX2(F1,f2)和IX3(f2)

我正在运行的查询如下:

SELECT g.F1
FROM DB1.Table1 g 
INNER JOIN DB2.Table2 gp ON g.F1 = gp.F1 
WHERE (gp.f2 = 452677825) AND
(g.f2 = 'A string value') LIMIT 0,56
Run Code Online (Sandbox Code Playgroud)

此查询有时非常快(<1s),但更改g.F2所比较的字符串值会导致查询甚至超过11秒甚至30秒.我不明白为什么会这样.以下是执行SELECT的EXPLAIN的输出.

1, 'SIMPLE', 'g', 'ref', …
Run Code Online (Sandbox Code Playgroud)

mysql performance join sql-execution-plan

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

优化SQL查询以避免全表扫描

请考虑以下查询:

SELECT * FROM Transactions
WHERE day(Stamp - interval 3 hour) = 1;
Run Code Online (Sandbox Code Playgroud)

Transactions表中的Stamp列是TIMESTAMP,并且有一个索引.我怎样才能更改此查询以避免全表扫描?(即在day()函数之外使用Stamp)

谢谢!

mysql sql compound-index

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

mysql多列索引无法正常工作(如预期的那样)?

我有一张这样的桌子

CREATE TABLE IF NOT EXISTS `tbl_folder` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_userid` int(11) NOT NULL,
  `name` varchar(63) NOT NULL,
  `description` text NOT NULL,
  `visibility` tinyint(4) NOT NULL DEFAULT '2',
  `num_items` int(11) NOT NULL DEFAULT '0',
  `num_subscribers` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `owner_userid` (`owner_userid`),
  KEY `vis_sub_item` (`visibility`,`num_subscribers`,`num_items`)
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)

因为我有一个可见性索引,num_subscribers和num_items,我希望只需要查看前15行,而EXPLAIN说55856行.任何的想法?谢谢

EXPLAIN SELECT t.id, name, description, owner_userid, num_items, num_subscribers
FROM  `tbl_folder`  `t` 
WHERE visibility =2
ORDER BY  `t`.`num_subscribers` DESC ,  `t`.`num_items` DESC 
LIMIT 15

id select_type …
Run Code Online (Sandbox Code Playgroud)

mysql indexing sql-order-by compound-index sql-execution-plan

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

如何禁用或绕过phpmyadmin的SQL_CALC_FOUND_ROWS

当你SELECT在幕后处理一个通过phpmyadmin时,它有时会添加一个LIMIT 0,30,和/或它会抛出一个SQL_CALC_FOUND_ROWS,SELECT所以它可以告诉我有多少结果没有LIMIT.

不幸的是,添加SQL_CALC_FOUND_ROWS有时需要的处理比我预期的要多得多(例如,比我运行原始的无问题查询更多).

是否有全局配置选项来禁用phpmyadmin对我的查询的修改?

我可以在每个查询的基础上使用哪些技巧来阻止phpmyadmin的修改?

mysql phpmyadmin sql-calc-found-rows

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

MySQL匹配全文

我试图用mysql进行全文搜索,以匹配字符串.问题在于它首先返回了奇怪的结果.

例如,字符串'passat 2.0 tdi':

            AND MATCH (
            records_veiculos.titulo, records_veiculos.descricao
            )
            AGAINST (
             'passat 2.0 tdi' WITH QUERY EXPANSION
            )
Run Code Online (Sandbox Code Playgroud)

作为第一个结果返回这个(其他人都很好):

Volkswagen Passat Variant 1.9 TDI- ANO 2003
Run Code Online (Sandbox Code Playgroud)

这是不正确的,因为在这个例子中没有"2.0".

会是什么呢?

编辑:此外,由于这可能是一个大型数据库(期望高达500.000条记录),这种搜索方法是否最适合自己,或者安装任何其他搜索引擎如Sphinx会更好吗?或者如果没有,如何显示相关结果?

edit2:对于记录,尽管问题被标记为已回答,但MySQL分隔符的问题仍然存在,因此如果有人对如何逃避分隔符有任何建议,那么将会受到赞赏并且值得获得500分.我发现增加结果集的sollution是用IN BOOLEAN MODE替换WITH QUERY EXPANSION,使用运算符强制引擎得到我需要的单词,如:

AND MATCH (
records_veiculos.titulo, records_veiculos.descricao
)
AGAINST (
 '+passat +2.0 +tdi' IN BOOLEAN MODE
)
Run Code Online (Sandbox Code Playgroud)

它根本没有解决,但至少结果的相关性发生了显着变化.

mysql full-text-search match

5
推荐指数
2
解决办法
2555
查看次数

如何清除MySQL的MEMORY表中的开销(Data_free)?

我在MySQL中有一个用于实时聊天的MEMORY表(也许这不是为此的最佳表类型?),并且每晚删除行以使聊天日志可管理,从而导致表开销。但是,由于您无法在MEMORY表上运行OPTIMIZE,如何摆脱开销(Data_free在中show table status)?

mysql memory overhead

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