在一个MySQL数据库表中,我有以下索引:
类型: BTREE
独特:否
包装:不
字段: lastname,名字,年龄
当我做这样的查询时..。
SELECT firstname, lastname FROM table ORDER BY lastname ASC, firstname ASC, age DESC
..。MySQL不使用索引。
但当我按升序使用“年龄”时,它也是这样的:
SELECT firstname, lastname FROM table ORDER BY lastname ASC, firstname ASC, age ASC
为何会这样呢?列
经验测试表明,在InnoDB表上有这样的查询:
SELECT indexed_column FROM tab ORDER BY indexes_column ASC;
比与ORDER BY ... DESC对应的更快。为什么是这种情况?
注意:我用MySQL 5.7和5.6做了测试。因此,这与8.0中的升序索引无关。
我有一个sqlite查询,它必须尽可能快地运行。查询相当简单,但我不知道索引表以获得最佳性能的最佳方法。
该表被称为"lexicon“。它的定义是:
_id integer primary key
word text
frequency integer
lset integer
rset integer
查询为:
SELECT word,frequency FROM lexicon WHERE lset>? AND rset<? ORDER BY frequency DESC LIMIT ?
我已经为所有单独的列建立了索引,但我怀疑复合索引可能更好,但是是哪种组合呢?lse
我有一个mysql/php查询,它在数据库中搜索,并根据用户输入的搜索字符串返回匹配项,它是按标题升序排序的,但是我们真的希望它按最佳匹配排序(类似于ElasticSearch用分数对搜索结果进行排序的方式)。
目前,当搜索"quake II“时,结果列表如下:
- Quake
- Quake 4
- Quake II
- Quake III Arena
预期结果列表必须为:
- Quake II (corresponding exactly to the search)
- Quake III Arena (containing entirely the search)
- Quak
我在firebird查询中遇到了索引问题。
下面是我的问题。
SELECT a.objid,
b.running_qty,
b.running_qty2,
b.running_totalcost,
b.running_lastcost
FROM mm_itrghd a,
mm_itrgdt b
WHERE (a.objid = b.header_id)
AND (b.item_id = 1200)
AND (b.wh_id = 1)
AND ((a.postdate < '2010-09-05 00:0
我有一个数据透视表,当然每一行都会包含在一个查询中:
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
我在mysql中也看到了类似的问题,但是我几乎找不到任何解决sqllite问题的方法。
我的样本桌,
-----------------------------
ID | Product Name | Price
-----------------------------
1 A 2
2 B 2
3 C 1
4 D 3
5 E 2
在这里,我需要得到行,直到价格列的总数按升序等于
我正在尝试学习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的尖锐问题..。
这里的想法是从表中选择n条最后的记录,通过属性(可能从另一个表)进行过滤。就这么简单。
在这一点上,你想回答:
N= 10
SELECT *
FROM huge_table
JOIN another_table
ON another_table.id = huge_table.another_table_id
AND another_table.some_interesting_property
ORDER BY huge_table.id DESC
LIMIT 10
如果没有join,mysql将从末尾读取索引
我有大量的记录在一些startDateTime字段上建立索引,并希望在按WEEKOFYEAR(startDateTime) (即EXTRACT(WEEK FROM startDateTime))分组的所有记录上选择聚合(和和计数)。我可以在EXTRACT(WEEK FROM startDateTime)上建立二级索引吗?或者,更好的是,查询会适当地使用startDateTime上的索引来优化按周分组的请求吗? 有关MySQL索引,请参阅this similar question。在云扳手世界中,这将如何处理?
这是用于InnoDB和MySQL 5.7的。
如果我有这样的查询:
SELECT A, B, C FROM TABLE WHERE STRCMP(D, 'somestring') > 0
是否可以在D上建立一个可供查询使用的索引?也就是说,MySQL是否足够聪明地为STRCMP函数使用btree索引?
如果没有,我如何才能重新设计查询(和/或表),以便能够对D进行字符串比较,并且可以进行某种形式的剪枝,从而不必命中每一行?
假设我有一个查询,如下所示:
SELECT * FROM users WHERE username = 'test' AND somethingelse = 'test'
我想知道是否有必要为两个列都建立索引以进行优化。MySQL是否首先查找所有值为'test‘的username列,然后在这些结果中搜索带有'test’的其他列?或者是同时发生的?
Rails查询:
Detail.created_at_gt(15.days.ago.to_datetime).find_each do |d|
//Some code
end
等价的mysql查询:
SELECT * FROM `details` WHERE (details.id >= 0) AND
(details.created_at > '2012-07-01 12:22:32')
ORDER BY details.id ASC LIMIT 1000
通过在rail
这个MySQL查询
SELECT * FROM notes WHERE school_code = 'brisch' ORDER BY ID DESC
在MySQL终端中工作(以降序的ID顺序显示记录,它们按升序存放在表中),但当我在PHP脚本中使用它时,如下所示:
$query = "SELECT * FROM notes WHERE school_code = '$skcode' ORDER BY ID DESC";
$nresult = mysql_query($query);
$nnum = mysql_numrows($nresult)
我有一个MySQL表“结果”,它有以下字段:
id (PK, AI), user_id (FK), date, score, time
我希望能够查询这个表,以便它按照分数(降序)和时间(升序)排序和返回字段。所以,就像:
SELECT * FROM results ORDER BY score DESC, time ASC.
但是,在进行此排序之后,如果多个行具有相同的user_id,则只希望包含最高的行。
我该怎么做?
如果我有两个表,A和B,其中A在A.i和A.ii上建立索引,而B在B.i上建立索引,我运行以下查询:
SELECT *
FROM A JOIN B
on A.i = B.i
我知道这将使用B上的索引,但如果我使用以下查询,我是否会获得任何性能提升(即,使用A上的索引)?
SELECT *
FROM A JOIN B
on A.i = B.i AND A.ii = B.ii
我的直觉告诉我没有, MySQL文档建议我需要在A.i和A.ii上使用WHERE子句才能看到任何好处,但我希望不仅仅是有根据的猜测。