我正在处理一个查询,如果可能的话,我希望提高它的效率。
桌子是这样的:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
FULLTEXT (title)
) Engine=MyISAM;
需要有效率的查询:
SELECT * FROM articles
WHERE
MATCH (title)
AGAINST ('+MySQL' IN BOOLEAN MODE)
AND title <>
尽管标题列是通过使用以下查询添加为索引的:
ALTER TABLE Recipe ADD INDEX Title_idx (Title)
MySQL没有将该索引用于此查询:
SELECT * FROM Recipe
WHERE Title LIKE '%cake%';
我使用了EXPLAIN关键字,关键字段是NULL。
如何解决这个问题?我必须改进这个查询。
我有一个MySQL表T,列c1上有一个索引。我的连接查询如下所示。
select something from T as t1 inner join T as t2 on ABS(t1.c1-t2.c1)<2;
我使用explain来查看MySQL是否使用索引。上面的查询没有使用索引。但它确实为下面的查询使用了索引。
select something from T as t1 inner join T as t2 on t1.c1=t2.c1;
那么如何让MySQL在第一次查询时使用索引呢?
提前谢谢。
我使用的是mysql数据库,它只有一个表"data"和17,151257 rows.This表有一个列字符串。我希望打印字符串列中包含特定查询字符串(存储在"entered_query“变量中)的所有行,因此我使用了以下方法:
SELECT DISTINCT * from data WHERE string LIKE '%".$entered_query."%' limit 10
很明显,上面的查询要花费太多的时间来执行。
我读过索引是可以使用的,但在这种情况下如何使用呢?
我还考虑过将整个数据划分为10个不同的行,然后使用perl D
如何优化此mysql查询:
SELECT *
FROM messages
WHERE toid='".$mid."'
AND fromid='".$fid."'
OR (toid='".$fid."' AND fromid='".$mid."')
AND subject != 'something'
order by id ASC LIMIT 0,5
我需要在一个页面中获得用户之间的消息。这个查询占用了大量的时间和服务器资源。
我有一个简单的查询,如下所示
select id, name from mytable where age=28 order by name
EXPLAIN输出把我搞糊涂了,我得到
possible_keys : age
key : name
这是否意味着mysql最终决定使用索引'name‘来获取所有行?是否使用了年龄索引?此查询中使用了多少个索引?如果它是mysql最终选择使用的名称索引,那么“age”索引发生了什么?
我在mySQL (MyISAM)中有一个查询:
SELECT * FROM `links` WHERE `id` IN (SELECT `link` FROM `posts` WHERE `read_time`<'2010-10-16')
对我来说似乎没问题,但是MySQL挂断了。“‘links”是一个有16000行的表,“post”大约有5000行。‘'id’和'link‘是主要的
我做了一些测试:
删除每个表中除一对记录外的所有记录。它起作用了
首先执行内部查询(从link posts read_time<'2010-10-16&
我正在尝试理解MySQL中的索引。我知道,在表中创建的索引可以加快查询的执行速度,并且可以减缓行的插入和更新。
在创建索引时,我在一个名为authors的表上使用了这个查询,该表包含(AuthorNum、AuthorFName、AuthorLName、.)
Create index Index_1 on Authors ([What to put here]);
我知道我必须放一个列名,但是哪一个?
,当用户查询表或什么时,我是否必须将将要比较的列名放在Where语句中?
我对SQL查询有问题,它在一个系统(Windows,XAMPP)上执行得很快,而在另一个系统(Ubuntu)上执行得很慢。MySQL设置是否有问题,如果是,如何设置MySQL?我尝试在Ubuntu上设置my.cnf,但没有成功。
SQL查询在phpmyadmin:SELECT id_dev, d.date_add FROM dev_data as d WHERE date_add=( SELECT MAX(date_add) FROM dev_data WHERE id_dev = d.id_dev)中执行。
在使用/2.4.38 (Win64)的Windows上,PHP/7.3.3
MySQL/MariaDB启用了log_queries_not_using_indexes,这个查询显示在日志中:
SELECT * FROM `client` WHERE 1 ORDER BY `code` ASC;
client表有一个用code列定义的BTREE索引。我很好奇为什么它没有被使用。我理解。
由于查询中的WHERE 1子句,是否没有使用索引?还是这样简单的查询就不一定要使用索引呢?
这对我来说是学术性的,查询已经运行得很快了。
所以我有一个MYSQL db,其中布尔值存储为binary(1)。我要研究为什么某些查询是缓慢的,即使在相关列上有一个索引。问题是,在构建SELECT查询时,系统使用了setBoolean方法PreparedStatement,据我所知,该方法将值转换为MYSQL TINYINT。查询找到了正确的行,但没有使用索引,因为索引位于二进制列上。但是,如果我使用setString方法并将布尔值转换为字符串,即'0' for false和'1' for true,MYSQL就能够使用索引并快速找到想要的行。
基本上,第一个查询是我使用setBoolean时得到的,第二个
我使用了一个简单的JOIN查询,但是MySQL在EXPLAIN计划中总是显示错误的索引。
它在不参与查询的列上选择一个索引。
查询基于主键。我尝试删除索引,但是优化器选择了另一个不相关的索引。
在我的例子中,表a包含大约250万条记录,表b包含大约500万条记录。A中的每条记录在b中有~2条记录。
我使用的是MySql 5.6。
我在桌子上做了ANALYZE和CHECK。
查询大约需要70秒,它使用了错误的索引并执行嵌套循环,为什么?
SELECT
IFNULL(SUM(a.val),0) as total
FROM a , b
where a.id = b.a_id;
1 SIMPL
我正在编写SQL查询,并在查询中使用了%符号。示例:
SELECT * FROM TABLE A where state='NewYork%'
我的问题是,在变量位置使用%对MySQL的性能有何影响?它如何与索引一起工作?
Ex 1: SELECT * FROM TABLE A where state='NewYork%'
Ex 2: SELECT * FROM TABLE A where state='%NewYork'
Ex 3: SELECT * FROM TABLE A where state='%NewYork%'
假设我们只有一个索引idx_abcd,即(A,B,C,D)。大约有3000万行。
我们现在有一个查询
SELECT COUNT(*)
FROM tableName
WHERE B = ? AND C = ? AND D = ?;
上述查询的EXPLAIN语句显示了以下有用的数据:
nullfiltered:类型:索引键:idx_abcd行:~3000万ref:idx_abcd 0.1<code>H 113</code>额外:使用where;使用索引<code>H 214</code><code>F 215</code>
W
当我在MySQL中运行以下查询时:
SELECT count(*) FROM Inventory AS i WHERE i.lastModified > 1389920146804
或
SELECT i._id FROM Inventory AS i WHERE i.lastModified > 1389920146804;
EXPLANE命令将显示使用了lastModified上的索引。
但当我跑
SELECT * FROM Inventory AS i WHERE i.lastModified > 1389920146804;
或者任何其他超过两行的查询,我们都会得
我试图理解为什么MySQL没有使用正确的索引。
tb_msgs
id int PK
id_user int
id_user_friend int
sent bool
hour int
created_at date
我创建了两个索引:
Index01 => (id_user,id_user_friend) unique
Index02 => (id_user,hour,created_at)
我将执行两种类型的查询:
1) where id_user=xxx
2) where id_user=xxx and hour=x and created_at=curdate() and s
我有一个名为"demo_dev“的数据库,并添加了一个名为"countries”的表。
我希望在一个列上创建一个位图索引,比如区域,因为它的唯一值较少,使用下面的查询。
CREATE BITMAP INDEX ON countries (region);
它引发了一个错误,如下所示:
您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得使用“国家(地区)位图索引”附近的正确语法。
要使它成功运行,应该做些什么?
我刚刚引用了以下链接:http://dev.mysql.com/worklog/task/?id=1524
mysql版本: 5.5
Mysql版本- 5.5.39
我有两张表Bugs和BugStatus
我想获取给定用户的Open和Closed错误计数。
我当前正在使用此查询
SELECT BugStatus.name,
count(BugStatus.name) AS count
FROM bugs
INNER JOIN BugStatus ON bugs.status = bugstatus.id
WHERE bugs.assignee='irakam'
GROUP BY bugstatus.name;
现在让我们假设我的Bugs表中有100,000行。这个查询是否仍然有效,或者我应该
目前,我正在试图找出哪个查询实际上更好地使用了索引,哪些查询更快(这两种情况并不总是一致的)。
我已经运行了两次相同的查询,但是为了最大限度地提高性能,对索引列进行了调整。
INDEX(type, finalized_on, user_id, date_applied)
mysql> explain
select user_id
, sum(amount) amount
from user_accounts_payable force index (type_date_finalized_user)
where type=1
and date_applied