我看到有一个很好的选项,如何启用日志慢查询和没有索引的查询:
SET GLOBAL log_queries_not_using_indexes=1;
SET GLOBAL log_slow_queries=1;
好的,好的,但是它们似乎都写入了我在my.cnf配置文件中指定的同一个日志文件:
[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/mysql-slow.log
我使用mysqldumpslow查看最慢的查询,但是我需要做什么才能单独查看那些没有索引的查询呢?
考虑一下,您有一个名为“user”的MySQL表,它有数以百万计的行,其结构如下,并且没有任何索引。
TABLE: user_id (PK) email name signup_date
我们希望执行以下查询:
SELECT user_id
FROM user
WHERE email=’email@bolidea.com’ AND name=’Olivier Cabanes’
MySQL如何处理该查询的速度?
如何提高该查询的性能?
如果我运行以下查询:
SELECT `Manga`.`id`, `Manga`.`name` FROM `mangas` AS `Manga` WHERE `Manga`.`id` in
(
SELECT `manga_id` FROM `mangas_genres` where `manga_id` = 1
)
我的计算机没有响应(我只是输入错误)。它无法运行此查询。上面的代码是否无效?请帮帮我。
我认为它是有效的,但它不能运行。我不明白。它肯定是MySQL,我在MYSQL工作台上运行查询(不是在PHP中)我的计算机非常慢(当运行查询时)我的table mangas和mangas_genr
我有一个简单的查询-它只查看一个表,并有两个用于索引的列可供选择,一个ErrorTypeId (指向大约20个唯一值的查找表)和DateOccurred (一个可以包含任何日期的datetime列)。
在大多数情况下,这是可以的,但在某些情况下,查询会超时。查看一下,选择的索引(ErrorTypeId)在其计划中的行数比其他索引(DateOccurred)少得多,但是由于某些原因,运行所需的时间比我手动强制它使用另一个索引要长得多。
/* This execution plan has fewer rows than the second one - and as a result this
我想问一个问题,我所面临的条件是,我必须根据搜索查询参数带来结果,而且我也必须在其中实现分页。
假设一个搜索字符串有PEPSI
我正在查询如下
Select * from product where product_title Like '%pepsi%' LIMIT 0,100
表产品有5000万行。
那么,我的问题是,MySQL将如何工作?对于产品表中的关键字百事,MySQL是否遍历了所有5000万行?如果是这样的话,那么查询将非常慢,而且要花费很多分钟,即使我添加分页偏移量?
当我向联接添加第二层抽象时(即首先加入一个连接的表),查询时间将乘以1000 x。
mysql> SELECT xxx.content.id, columns.stories.title, columns.stories.date
-> FROM xxx.content
-> LEFT JOIN columns.stories on xxx.content.contentable_id = columns.stories.id
-> WHERE columns.stories.title IS NOT NULL
-> AND xx
我正在使用MySQL运行我的Rails应用程序。我开始查看我的MySQL慢查询日志,我发现大约有6000行,其中大部分重复了以下查询。
SET timestamp=1488423689;
SELECT COUNT(*) FROM `system_events`
WHERE (notified
AND id != 476200
AND customer_id = 1
AND classification = 50039
AND created_at >= '2017-02-27 03:01:26');
# Time:
我有一个包含5000记录的表。当我在表(有30列)查询500记录本身的选择时,需要30秒。如何减少从MySQL检索数据的时间?我在表中索引3主整数类型列,包括primary key。还有其他解决办法吗?
示例查询:select * from my_table where my_condition LIMIT 500
我注意到,由于Mysqld在高峰时间出现问题,我在编写SQL查询时遇到了问题。这会导致我的网站加载速度比平时慢3-5倍。因此,我已经尝试了siege -d5 -c150 http://mydomain.com/和查看top和我的mysqld超过700%的CPU!我还在mysql状态中注意到:Copying to tmp table和查询添加到某些队列或类似的内容中。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25877 mysql 20 0 1076m 227m 8268 S 749.
我正在使用一个时间分析器来优化我的python脚本。事实证明,mysql查询在我的python脚本中占用了大量时间。总共只有19个查询。据cProfile报道,这19个mysql查询耗时超过7.44秒。
下面是完整的脚本代码,其中mysql查询和相应的查询时间以秒为单位。
$ python -m cProfile -s time myscript.py
MYSQL Queries
SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val1'
0.378623008728
SELECT column F
我正在为我的网站创建一个搜索功能,用户可以在文本字段中输入任何他喜欢的内容。它可以匹配任何东西(名字,头衔,工作,汽车品牌,...你可以说出它的名字)
最初,我在需要搜索的每个表上编写了一个内部联接查询。
SELECT column1, column2, ... FROM person INNER JOIN person_car ON ... INNER JOIN car ...
这最终导致了一个具有6到8个内部连接的查询,以及大量的WHERE ...如'%searchvalue%‘
现在这个查询似乎在MySql中引起了一个超时,我甚至从我的主机提供商那里得到了一个警告,这个查询占用了
我有一个45 got的表,它有76m行和150列。
当我运行以下简单查询时:
SELECT count(*) FROM my_table WHERE `column_of_interest` IS NOT NULL
返回结果需要850秒。我可以看到mysql进程在整个时间以~40 at /秒的速度读取磁盘。这意味着它会遍历存储在表中的几乎整个数据,尽管它只需要知道一个列。
我假设,如果它能够具体地读取该列的数据,它将以大于100倍的速度读取(因为有150列)。
是否有任何方法允许MySQL读取单个列?下表提供了资料。
谢谢你的反馈,
万事如意,
伊曼纽尔
使用对我得到的查询的解释:
'
我正在使用MySQL中的一个表,该表使用“邻接列表”方法定义树层次结构,就我的目的而言,该方法应该很好。
我需要使用(fast)查询计算所有子程序上某些值的最大值。
SELECT MAX(N.someValue) AS rate
FROM `nodes` N
WHERE N.parent = <some node id>;
有时我不那么幸运,不得不和孩子的后代一起工作(它定义了,并且总是引用那棵树的分支中的某个叶节点)。
SELECT MAX(N.someValue) AS rate
FROM `nodes` N
WHERE N.id IN (SELECT N2.descendan
我有一个基于MySQL的应用程序,它通过Hibernate连接。我使用DAO实用程序代码查询数据库。现在我需要通过索引优化我的数据库查询。我的问题是,如何通过Hibernate DAO实用程序代码查询数据,并确保在执行查询时在MySQL数据库中使用索引。任何提示或指向现有例子的指针都是非常感谢的!
更新:只是想让这个问题更容易理解一点。下面是我用来通过Hibernated实用程序代码查询MySQL数据库的代码。我不在这里直接使用HQL。有最好的解决方案吗?如果需要,我将重写数据库查询代码并直接使用HQL。
public static List<Measurements> g
我的一个网站有太多的MySql连接,我在脚本中做了一些性能,并关闭了一些昂贵的查询,以使网站更容易到达。
因为我的处理器列表已经满了100%的查询,所以我认为它将帮助服务器重新启动mysql (再次快速响应)。
/etc/init.d/mysql stop
不,我试着关闭mysql,它说会的。但是10分钟后,命令似乎被冻结了,我没有看到更多的反应。我被ctrl+x退出了,我想再次尝试mysql命令,失败!我也无法启动mysql。
如果您看一下命令“top”,它会给我一些严重的不好的mysql结果。
PID USER PR NI VIRT RES SHR S %CPU %M
我想知道具有不太具体的WHERE子句的SELECT查询和具有更具体的WHERE子句的另一个SELECT查询之间是否存在性能提升。
例如,查询如下:
SELECT * FROM table1 WHERE first_name='Georges';
比这个慢:
SELECT * FROM table1 WHERE first_name='Georges' AND nickname='Gigi';
换句话说,是否存在与WHERE子句精度有关的时间因素?
我不确定是否很容易理解,即使我的问题考虑到了数据库查询中涉及的所有组件(在我的例子中是MYSQL)
我有一个mysql innodb表-
create table data (
`sha256` CHAR(64) NOT NULL,
'created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
<some other fields>
PRIMARY KEY (`sha256`),
)
mysqld_slow_query中最慢的查询之一是
select * from data where created between "2013-02-01" and "2013-03-01";
我有80000多个客户和4组。现在,我想在mysql中找到两个具有查询的组用户。我的查询如下:
select c.customers_firstname as recipient_firstname,
c.customers_lastname as recipient_lastname,
c.customers_id as recipient_id,
c.customers_email_address as recipient_email_address
from customers c
where customers_group_id = &
我的表有1,000,000行和4列:
id cont stat message
1 rgrf 0 ttgthyhtg
2 frrgt 0 tthyrt
3 4r44 1 rrttttg
...
我正在执行一个select查询,即使我已经建立了索引,它的执行速度也非常慢
SELECT * FROM tablea WHERE stat='0' order by id LIMIT 1
这个查询让我的mysql变得非常慢,我用mysql explain检查了一下,发现了这个
explain SELECT *
我有一个包含大约500,000条记录的mySQL表。该表的大小约为45MB。第一次执行查询时,每次都需要近20秒,但随后的查询速度很快。如果我注销,然后重新登录,查询仍然很快。如果我4-5小时后再来。同样的查询又慢了一次。
查询非常简单。
$query = "select * from tableName where uniqueID='$passedID' ORDER BY tableName ASC";
$result = mysql_query($query) or die('Query failed: ' . mysql_error())