小编dot*_*hen的帖子

为什么 SELECT * 会比 SELECT foo 快几个数量级?

考虑一个值和哈希表,如下所示:

+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| val        | char(9)  | NO   |     | NULL    |                |
| val_hashed | char(50) | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

以下查询在 0.00 秒内完成:

SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

但是,此查询需要 3 分 17 秒:

SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1; …
Run Code Online (Sandbox Code Playgroud)

mysql performance select

29
推荐指数
2
解决办法
3888
查看次数

无法将 MySQL 数据输出到文件

我正在尝试将 MySQL 表中的数据输出到文件,但出现权限错误:

$ pwd
/home/dotancohen
$ mkdir in
$ chmod 777 in/
$ mysql -ugs -p
mysql> USE someDatabase;
mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv';
ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES)
mysql>
Run Code Online (Sandbox Code Playgroud)

如果有问题的目录被chmodded为777,那么为什么MySQL用户不能写入文件?有趣的是,我也不能写入 /tmp/。

编辑: 看起来数据库用户具有适当的 MySQL 权限:

mysql> show grants;
+----------------------------------------------------------------------------------+
| Grants for gs@localhost                                                          |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'gs'@'localhost' IDENTIFIED BY PASSWORD 'somePassword'     | 
| GRANT ALL PRIVILEGES ON `gs\_%`.* TO 'gs'@'localhost'                            | 
+----------------------------------------------------------------------------------+
2 rows …
Run Code Online (Sandbox Code Playgroud)

mysql linux permissions

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

无法配置或启动 MySQL

在全新的 Kubuntu 14.04 安装中,我运行了sudo aptitude install mysql-server-core-5.6. 由于某些 KDE 软件包依赖于mysql-server-core-5.5,安装无法完成,这些软件包将被替换。现在,当我运行时,sudo aptitude install mysql-server-5.5在指定密码后出现此错误:

Configuring mysql-server-5.5
Unable to set password for the MySQL "root" user
An error occurred while setting the password for the MySQL administrative user. This may have happened
because the account already has a password, or because of a communication problem with the MySQL server.
You should check the account's password after the package installation.
Please read the /usr/share/doc/mysql-server-5.5/README.Debian file for more …
Run Code Online (Sandbox Code Playgroud)

configuration mysql-5.5

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

选择每第 n 行,不要拉整个表

鉴于关于允许在 dba.SE上使用基本 SQL 问题的 Meta 讨论,我提出了一个我现在遇到的问题,对此 Stack Overflow 上的答案是不充分和幼稚的。我希望有比 SO 上提出的问题更好的解决方案(因为我目前在应用程序中面临这个问题),而 dba.SE 似乎是找到更好答案的理想场所。

这是 Stack Overflow 上的原始问题:如何从 mysql 中选择每个第 n 行?

这是公认的答案:

SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 1 
Run Code Online (Sandbox Code Playgroud)

接受的答案的关键问题是它需要将整个表拉到一个临时表中。因此,我已经在这个问题的标题中解决了这个问题。

还要考虑该表可能已删除行,因此仅对WHERE MOD主键进行测试的替代查询也不是一个好的解决方案。Id est,不能相信主键是连续的。

有没有更好的方法来表达查询,该查询将返回每第二、第十或任意第 n 行,它不需要将整个表拉入内存但也考虑已删除的行?

每个第 n 行都可以定义为:

n =  2: Rows 0, 2, …
Run Code Online (Sandbox Code Playgroud)

mysql

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

LEFT JOIN 如何比未加入的查询返回更多的结果?

考虑以下查询:

mysql> SELECT count(*) FROM list l WHERE l.source='blink';
+----------+
| count(*) |
+----------+
|     3372 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT count(*) FROM list l LEFT JOIN cardinal c ON l.id=c.id WHERE c.resolution IN ('Left','Right','Up') AND l.source='blink';
+----------+
| count(*) |
+----------+
|     5116 |
+----------+
1 row in set (2.47 sec)
Run Code Online (Sandbox Code Playgroud)

INSERT在这两个运行的查询之间没有在数据库上运行或运行其他查询。第二个查询似乎比第一个查询更严格,那么它怎么会返回更多的行呢?请注意,该list表有超过 200 万行,而该cardinal表大约有 50 万行。

编辑:添加EXPLAIN输出:

mysql> EXPLAIN SELECT count(*) FROM …
Run Code Online (Sandbox Code Playgroud)

join

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

ON DUPLICATE KEY UPDATE 比 UPDATE 快

我有一个大约有 1700 万行的表:

mysql> describe humans_we_respect;
+---------------------+-------------------------------------------------------------------------+------+-----+---------+-------+
| Field               | Type                                                                    | Null | Key | Default | Extra |
+---------------------+-------------------------------------------------------------------------+------+-----+---------+-------+
| id                  | bigint(20)                                                              | NO   | PRI | NULL    |       |
| name                | varchar(63)                                                             | YES  |     | NULL    |       |
| address             | varchar(127)                                                            | YES  |     | NULL    |       |
| city                | varchar(63)                                                             | YES  |     | NULL    |       |
| state               | varchar(3)                                                              | YES  | MUL | NULL    |       |
| zip …
Run Code Online (Sandbox Code Playgroud)

mysql update

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

不能改变表

我有一个特定的表,我无法为其添加密钥:

mysql> ALTER TABLE tasks ADD KEY `fruitful_user_count` (`user_id`, `is_fruitful`);
ERROR 1034 (HY000): Incorrect key file for table 'tasks'; try to repair it
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这个问题似乎这个问题通常是配置问题或磁盘空间问题。事实上,这个数据库运行在一个Amazon RDS实例上,这意味着它基本上是一个专用于MySQL的托管服务器,配置非常标准。此外,分配给我们的磁盘只有大约 25% 已满。

考虑到可能虚拟机上的磁盘(我相信由 Xen 提供支持)已满,而不是我分配的磁盘空间,甚至可能不在同一个房间(网络存储)中,我重新启动了 RDS 实例,希望我能得到另一个 VM 上的新实例。然而,这并没有帮助。

我的下一个故障排除步骤应该是什么?

这是表:

mysql> show create table tasks;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tasks | CREATE TABLE `tasks` (
`user_id` char(32) NOT NULL,
`module_id` int(11) NOT NULL DEFAULT '0',
`is_successful` tinyint(1) DEFAULT NULL,
`is_fruitful` tinyint(1) DEFAULT NULL,
`last_run` timestamp …
Run Code Online (Sandbox Code Playgroud)

mysql alter-table errors amazon-rds

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

MySQL 枚举具有非直观行为,为什么?

这篇非常有用的文章解释了有关MySQL 枚举行为的一些奇怪之处:http : //melp.nl/2009/05/mysql-enums-and-booleans/

没有关于为什么存在这种行为的讨论。此外,在谷歌搜索这个主题时,我发现只有相互矛盾的信息和推测,由“博主”和其他盲人引导。

有人可以描述一下为什么 MySQL 枚举会遭受帖子中概述的行为。这是帖子中介绍的 Enum 奇怪之处的一个示例,但还有更多示例

mysql> insert into t values('1'),('0');
mysql> select b,b=1,b=0 from t;
+---+-----+-----+
| b | b=1 | b=0 |
+---+-----+-----+
| 1 |   0 |   0 |
| 0 |   1 |   0 |
+---+-----+-----+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

mysql enum

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

在哪些字段上建立索引?查询的字段 (WHERE) 或返回的字段 (SELECT)

我在AWS RDS 中型实例上有一个大型 MySQL 数据库表(约 100 万行并且还在增长):

mysql> describe clients;
+-----------------+---------------+------+-----+---------+----------------+
| Field           | Type          | Null | Key | Default | Extra          |
+-----------------+---------------+------+-----+---------+----------------+
| id              | int(11)       | NO   | PRI | NULL    | auto_increment |
| name            | varchar(500)  | YES  |     | NULL    |                |
| address         | varchar(500)  | YES  |     | NULL    |                |
| city            | varchar(200)  | YES  |     | NULL    |                |
| state           | varchar(100)  | YES  | …
Run Code Online (Sandbox Code Playgroud)

mysql optimization explain

0
推荐指数
1
解决办法
112
查看次数