我有一个45 got的表,它有76m行和150列。
当我运行以下简单查询时:
SELECT count(*) FROM my_table WHERE `column_of_interest` IS NOT NULL
返回结果需要850秒。我可以看到mysql进程在整个时间以~40 at /秒的速度读取磁盘。这意味着它会遍历存储在表中的几乎整个数据,尽管它只需要知道一个列。
我假设,如果它能够具体地读取该列的数据,它将以大于100倍的速度读取(因为有150列)。
是否有任何方法允许MySQL读取单个列?下表提供了资料。
谢谢你的反馈,
万事如意,
伊曼纽尔
使用对我得到的查询的解释:
'
我有一个表,其中包含以下字段: userid、logintime、birthdate
我需要让所有的用户在生日X和Y与最近登录的第一个排序。
SELECT *
FROM table
WHERE birtdate BETWEEN x AND Y
ORDER BY logintime DESC
如果我只在birtdate上定义了一个索引,mysql将使用filesort对结果进行排序,这是我想要避免的(表越来越大,查询越来越流行)。
定义一个索引( logintime,birthdate)对我来说没有意义,因为logintime甚至不在WHERE子句中(我只通过birthdate限制结果集)
我正在尝试优化表单SELECT SQL_NO_CACHE col FROM TABLE ..的查询。当我第一次连接到数据库并执行查询时,大约需要9秒。当我第二次执行查询时,几乎需要0.1秒。我将放在查询中,以确保mysql不会从缓存中读取结果。我的问题是,为什么在连接到数据库(mysql -uroot ... )之后第一次执行查询所需的时间比后续执行的时间要长得多。查询的实际执行时间是多少?
我们的MySQL(Percona Server)数据库有一个包含1000万行的大表,有很多比40秒更长的慢查询:
SELECT col1, Seller, col3, col4, Id, col5
FROM table1
WHERE Seller = 346761
AND col1 IN (2, 3, 4)
AND col3 = 1
AND col4 NOT IN (5,6,7)
ORDER BY Id DESC
LIMIT 0, 20;
我在Seller、col1、col3、col4上创建了索引。这些索引是单独的,而不
假设我有players表。它由3行组成(它有更多,但假设它只有3行)。member_id, name, exp。我在每个页面中使用member_id行,这就是为什么我只向member_id添加索引的原因。但是我想在一个页面上用最高的exp做一个顶级球员的列表。所以我做了这样的事情:
$query = mysql_query("SELECT * FROM players ORDER BY `exp` DESC");
如果我有10k个播放器,我不能在不向exp添加索引的情况下运行这样的查询。所以我的问题是,我是否应该这样做:
mysql_query("ALTER T
我有两个表user和sku_pro,count查询在两个表中,如下所示
mysql> SELECT COUNT(id) FROM user WHERE user.is\_active = 1 \G;
COUNT(id): 239568
1 row in set (0.20 sec)
mysql> SELECT COUNT(id) FROM sku\_pro WHERE is\_agent=1 \G;
COUNT(id): 1254286
1 row in set (0.11 sec)
用户有61列,在用户表中运行show table status,结果为
mysql>
我有一个VPS服务器在Vultr的4GB内存。
服务
Mysql
Nginx
PHP7
梅卡奇
平台
Prosper202 -10数据库
Wordpress -100数据库
现在我最大限度地使用了37%的内存。它对我很好,但是我想更好地利用服务器,所以我的问题是:
什么价值观应该上升?
或者,当消耗更多的RAM时,数据库中的哪些东西应该占优先地位?
我的配置是:
# MariaDB database server configuration file.
#
# You can copy this file to one of:
# - "/etc/mysql/my.cnf"