我有两个问题:
首先,如果我在MySQL中有一个简单的视图,如下所示:
CREATE VIEW `peopleView` AS
SELECT id, name, surname FROM people
然后执行以下查询:
SELECT * FROM peopleView WHERE id = 5
MySQL服务器会在后台创建类似这样的东西吗?
SELECT id, name, surname FROM people WHERE id = 5
换句话说,它不会先执行视图,它可能会返回5000条记录,然后在这5000条记录上尝试过滤到id = 5的位置?这会使视图变得非常慢...
其次,我认为视图
我有一个数据透视表,当然每一行都会包含在一个查询中:
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表中有一个表,其结构如下
id (主索引) title,date (datetime) publicready (布伦)
我创建了这样的视图
CREATE view FROM SELECT * FROM tablename WHERE publicready AND date < NOW()
如果我对它运行一个查询需要1.8秒,但是
如果从视图中删除日期范围,相同的查询.0009秒
为什么会发生这种情况?我如何修复它?
我在所有的栏目上建立了一个索引,我们正在检查它是否比1.6稍快一些
我在MYSQL视图中执行了一个查询。这个特定的视图是我们的应用程序的核心,所以我们正在考虑对其进行调优。在Map_Id,User_No,X,Y上有一个主键。我对调优SQL server查询很满意,但不完全确定MySql在这方面是如何工作的。在它上面建立一个涵盖points和update_stamp的索引会有帮助吗?这个表的读取率是90%,所以虽然它有很多插入,但它不能与读取量进行比较。
描述:获取给定地图中每个x,y坐标的点最多的人。按拥有最新更新戳记的用户,然后按用户id打破平局。
SELECT GP.Map_Id AS Map_Id,GP.User_No AS User_No,GP
我有大量的记录在一些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’的其他列?或者是同时发生的?
如果我有两个表,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子句才能看到任何好处,但我希望不仅仅是有根据的猜测。
假设我有两个表,tab_a和tab_b。
我创建了一个视图,如下所示:
create view join_tabs as
(
select col_x as col_z from tab_a
union
select col_y as col_z from tab_b
);
如果我这样做:
select * from join_tabs where col_z = 'BLAH';
如果tab_a索引col_x,tab_b索引col_y,我们应该能够通过两次索引搜索来做到这一点。
但是,如果我能在一个索引中对两个表都建立索引,甚至为视图建立索引,并且可以在源表(tab
我有一个mySQL表hands,其中每个条目代表玩家在特定扑克手中的表现。重要的栏目是player和net。我希望建立一个“高分”页面,展示最好的球员基于总赢利的能力,过滤基于游戏类型,时间等。我已经获得了以下查询:
SELECT player,sum(net) AS profit FROM hands GROUP BY player ORDER BY profit DESC
不幸的是,到目前为止,我有很多记录,超过200万条,而且这个查询非常慢。我已经在"player“上建立了一个索引,但执行时间仍然超过7秒。有没有希望提高mySQL的速度,或者我必须以不同的方式来构造这个页面?如果
设想一个包含一个字段id的MySQL表,其中包含从数字1到10亿的10亿行。
当我执行这样的查询时
SELECT * FROM table WHERE id > 2000 AND id < 5000;
很明显,在id上建立索引将提高该查询的性能。
但是,这样的索引对模数是否也有帮助,如下面的查询所示
SELECT * FROM table WHERE (id % 4) = 0;
使用模数时,使用索引是否有帮助?
这个查询(存储过程的一部分)将被执行很多次:
SELECT TOP (@numRecords) BlogPost.postId,BlogPost.creationDate,
BlogPost.header,BlogPost.markedupContentAbstract
FROM dbo.BlogPost ORDER BY BlogPost.creationDate DESC
我应该在BlogPost表中的'creationDate‘字段上建立索引吗?我是否应该有一个对BlogPost记录进行排序的视图,然后从该视图中选择顶部?
详细信息:使用SQL Ser