MySQL可以使用两个或多个索引搜索表行吗?
我有一张有这些列的桌子:
relation:
- type varchar(32)
- id_foo int
- id_bar int
我需要基于type和presta_id或vario_id搜索行。查询将如下所示:
SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128
SELECT id_bar FROM relation WHERE type = 'qux' AND id_foo = 256
为这个表和这些搜索查询定义索引的正确方法是什么?
我意识到,当为用于"ORDER“的列创建索引时,对MySQL查询的响应变得更快。
SELECT username FROM table ORDER BY registration_date DESC
现在,我想知道应该创建哪些索引来优化请求时间。例如,我经常使用以下查询:
SELECT username FROM table WHERE
registration_date > ".(time() - 10000)."
SELECT username FROM table WHERE
registration_date > ".(ti
我有一个php/mysql应用程序,我有在我的项目中的所有行动的所有选择查询的日志。我想知道有没有可能得到任何关于select x, y from t1 where (con1 AND con2) OR con3 order by colx的建议,即哪些列必须被索引到我的日志中?
我有很多这样的查询,也有连接。我听说EXPLAIN可以帮助我为这个查询建议哪些列必须是索引。我想知道怎样才能知道哪些列必须是索引。多列索引、单列索引。order by需要被索引等等。
我在两个列上有一个带有完整文本索引headline_idx的表文档,标题和文本中的文本是MEDIUMTEXT列,还有其他一些字段,其中一个名为lang。
如果执行以下选择:
select * from Document where lang= 'en' AND match(headLine,text) against ("test")
所有操作都正常,全文索引将按预期使用,但如果我将AND更改为这样的OR:
select * from Document where lang= 'en' OR match(headLine,text) agains
我正在尝试学习mysql的“通过优化来排序”,所以我搜索相关的主题并找到官方的说:
索引使用的一个条件是索引必须具有相同的同质性,但不必具有相同的实际方向。如果查询混合了ASC和DESC,那么如果索引还使用相应的混合升序和降序列,优化器可以在列上使用索引:
SELECT * FROM t1
ORDER BY key_part1 DESC, key_part2 ASC;
优化器可以在( key_part1,key_part2)上使用索引,如果key_part1正在下降,而key_part2正在上升。如果key_part1正在上升,而key_part2正在下降,则还可以对这些列使用索
我刚刚开始在我的MySQL数据库中使用INDEXes,我有点不确定我的想法是否能起作用。我有一个文本字段,它可以存储大量文本,需要进行搜索,还有另一个id INT字段。如果我在我id_column字段上有一个索引,在我的text_column上有一个全文索引,MySQL会在查询中同时使用这两个索引吗
SELECT * FROM notes WHERE id_column='123' AND MATCH(text_column) AGAINST(search_text)
??
其次,我有一组可以经常用于组合搜索的列。如果我在这些列中创建多列索引,如果使用的列在索引中从左到右排列在
我有一个数据透视表,当然每一行都会包含在一个查询中:
mysql> select * from blog_posts as bp
join blog_joins as bj
on bj.post_id=1
and bj.taxonomy_id=10
and bj.type = 1;
下面是我的表结构:
是否建议为每一列建立索引?如果没有,为什么?你会推荐什么?
mysql > alter table blog_joins add index pid (post_id);
mysql > alter tab
最近,我了解到可以使用以下带有OR的select语句在多个列中搜索MySQL表:
SELECT * data WHERE TEMP = "3000" OR X ="3000" OR Y="3000";
返回所需的结果,但返回只有~260 k行的表中的结果大约需要1.7秒。我还为搜索的每个列添加了索引。
是否有优化此查询的方法?或者还有另一个速度更快但返回相同结果的方法?
好的,我在这里有一个SQL查询:
SELECT a.id,... FROM article AS a WHERE a.type=1 AND a.id=3765 ORDER BY a.datetime DESC LIMIT 1
我想按国家和id获取准确的文章,并为该索引创建两列type和id。Id也是主键。我使用EXPLAIN关键字来查看使用了哪个索引,它使用的不是多列索引,而是主键索引,但我确实在创建索引时准确地设置了where内容。
MySQL是否使用主键索引而不是多列索引,因为主键索引更快?或者我应该强制MySql使用多列索引?
附注:刚刚注意到,当只有一个结果行时,使用order是很愚
有时我会遇到一种奇怪的MySQL行为。让我们假设我有索引(type,rel,created),(type),(rel)。对于这样的查询,最佳选择是:
SELECT id FROM tbl
WHERE rel = 3 AND type = 3
ORDER BY created;
就是使用索引(type, rel, created)。但是MySQL决定将索引(type)和(rel)相交,这会导致较差的性能。下面是一个示例:
mysql> EXPLAIN
-> SELECT id FROM tbl
-> WHERE rel = 3 AND type = 3
当我使用Mysql时,我正在尝试更好地理解索引。一个问题是,我仍然很难确定我应该使用哪种类型的索引,如单个索引、多列索引、覆盖索引等。
我的一个问题是,有没有一个通用规则来决定使用哪种类型的索引?当我设计我的数据库布局时,我不知道所有的查询将使用什么,直到应用程序完成构建。对于一个表,我可以在一个或多个字段上查询,也可以查询它以进行报告。因此,如果我像这样查询一个表:
SELECT * FROM table1 WHERE field1 = this AND field2 = that GROUP BY field3 ORDER BY field4
我会在field1、field3、field3
我在MySQL中创建了一个视图
create view vtax
as
SELECT * FROM table1
union
SELECT * FROM table2;
在表1中有800000条记录,table2有500000条记录,当我运行独立查询时,结果返回0.078秒,但当我通过视图运行它们时,它花费的时间超过10-15秒。
select * from vtax where col1=value; -- takes more than 10-15 secs
select * from table1 where col1=value; -- takes 0.078 secs
sele
对相关功能的解释:
Postgres (索引合并)、MySQL (索引合并)和MongoDB (索引交叉)具有一个功能,当在 where 子句中有多个列的给定查询中没有找到多列索引时,DB使用多个单列索引(索引)。下面是Postgres的文档中提到的这个特性--
链接的摘录
从8.1版开始,PostgreSQL能够组合多个索引(包括同一索引的多个用途),以处理单个索引扫描无法实现的情况。系统可以在多个索引扫描中形成和或条件。例如,像WHERE = 42 OR x = 47 OR x= 53 OR x= 99这样的查询可以分解为对x上的索引进行四次单独扫描,每次扫描使用一个查询子句。然后将这
我这里有一个搜索脚本,需要使用MySQL和PHP搜索多个表中的短语/单词。正被搜索的列name列在表中都是相同的。任何帮助都将不胜感激,下面是我的代码:
<?php
$filter = $_REQUEST['query'];
mysql_connect($hostname,$username, $password) or die ("<script language='JavaScript'>alert('Unable to connect to database! Please try again later.
我有一个名为'test‘的简单MySQL表,其中有两列:
调用'id'Varchar(3000)列的自动增量int列称为“textcol”
我在表中创建了一个索引,该索引是基于“textcol”列的。但是,ORDER查询似乎没有使用索引,即在一个简单查询上的EXPLAIN语句在文本中的ORDER显示为NULL,并且在其输出的键列中显示为NULL,并且还使用文件。
任何要更改以帮助使用ORDER索引的指针对我来说都是有用的。
由"mysql -版本“命令提供的MySQL版本:
mysql Ver 14.14远端5.1.58,用于使用readline 6.2的deb
我有一个包含25亿条记录的表(2.5Cr.)我正在尝试获取基于索引列的记录计数。执行相同的代码需要115秒。
查询
Select count(1) from table1 where column=code
Table1: table with 2 billion (2 Cr.)
code gets resultset from DB with 1 to 10k rows,
Column is indexed.
Server Details
Intel Xeon 3.10ghz
8 gb RAM
MySQL server 5.1
MySQL Connector 5.0.6
My.cn
我试图理解为什么MySQL没有使用完整的索引来回答查询。让我解释一下。我正在通过MySQL版本5.1.73-1 (Debian)使用imdb数据库.我用列(itid_inf25_mid_ndx,info(25),movie_id)在表movie_info_idx上创建和索引“info_type_id”。列info_type_id和movie_id是整数( NULL),info是文本类型,因此每个索引条目都需要4+27+4 =35个字节。句子输出:
EXPLAIN
SELECT movie_id
FROM movie_info_idx
WHERE info_type_id = 101
AND i
如果我有一个包含3列索引的MyISAM表,如下所示
create table t (
a int,
b int,
c int,
index abc (a, b, c)
) engine=MyISAM;
问题是,下面的查询能否充分利用索引:
select * from t where a=1 and c=2;
换句话说,考虑到索引是一棵b树,MySQL是否可以跳过中间的列,同时仍然对第一列和最后一列进行快速搜索?
EXPLAIN似乎确实显示将使用索引,但是,额外的说明说:Using where; Using index和我不知道这到底是什么意思。