我想知道mysql视图是如何针对where子句进行优化的。我已经创建了一个mysql视图。
CREATE VIEW `testView` AS
select ID from `table1`
union
select ID from `table2`
当我触发此查询时
select * from testView where some_col = 'some_val'
执行此查询后,mysql将执行什么操作。
mysql是否将table1和table2中的所有行都放在内存中,然后触发where子句?
或
是否直接在内部触发此查询?
select ID from `table1
Mysql: 5.7
我有两张桌子,它们的结构完全一样。索引也是一样的。只是不同的表名而已。我用这两个表创建了一个视图,如下所示。
CREATE ALGORITHM = MERGE VIEW TESTVW AS SELECT * FROM tableA UNION ALL SELECT * FROM tableB
我的问题
EXPLAIN SELECT * FROM TESTVW WHERE pk=3
这个结果中没有使用的索引(即使where子句中使用了其他索引列)。有人能帮我做错什么吗。谢谢。
我创建了一个视图:
create view dh_hits_new_all_old
as
select * from dh_hits_new_201806
union all
select * from dh_hits_new_201807;
当我选择包含一个字段的where子句,该字段在各个表上都有一个索引时,MySQL不使用任何索引。见解释产出:
mysql> explain select count(*) from dh_hits_new_201806 where id_hits_url = 130442;
+----+-------------+-----------------
我有两张MySQL t1和t2表格。两者具有相同的列名。表t1具有巨大的数据,与t1相比,t2没有那么大,但同时t2也将与t1具有相同的大小。唯一的区别是这两个表中的id列不匹配。我想在这些列之外创建一个视图。
我所创建的是
CREATE VIEW vw_t1t2 AS SELECT id , name , lastname, depid FROM t1
Union
SELECT id , name , lastname, depid FROM t2;
如果我执行查询"Select * from vw_t1t2 where depid='100287'“。
视图没有
我有以下表:在MySQL 5数据库中:
projects - 1,000行
tasks (FKed to projects) - 10,000行
task_tags (FKed to tasks) -35万行
task_comments (FKed to tasks) - 750,000行
并希望获得任何任务在标记或注释中都有“紧急”一词的项目列表,即
select DISTINCT p.*
from projects p
join tasks t on p.id = t.project_id
left join task_tags tt on t.id = tt.task_id
left j
使用MySQL 8
我有cuenta_contable表(它是自引用的)和下面的View
CREATE VIEW cuenta_contable_union_view_with_code_32 AS
(
SELECT
cc.code, cc.description
FROM
cuenta_contable cc
WHERE
cc.code = '32'
)
UNION
(
SELECT
cc1.code,
cc1.description
FROM
cuenta_contable cc1
INNER JOIN
cuenta_
下面是我非常简单的MYSQL请求:
(SELECT start, name, id, info FROM `table1`)
UNION
(SELECT end, name, id, info FROM `table1`)
我想按照第1列对结果进行排序,我猜我需要使用别名:
(SELECT start as mydate, name, id, info FROM `table1`)
UNION
(SELECT end as mydate, name, id, info FROM `table1`)
ORDER BY mydate
MYSQL抛出了这个错误,我感到很惊讶:
"Unkno
我有10个表,每个表大约有2000万行。所有的表都具有相同的结构,但具有不同的数据,即名称、MobileNumber、地址。所有的表都有索引。对于任何记录,我都必须搜索所有的表。我用命令创建了一个视图: Create view myview as
Select * from table1 Union
Select * from table2 Union
...
Select * from table10 但是当我尝试像这样查询视图时 Select * from myview WHERE MobileNumber = '1111111111' 服务器有几个小时没有响应。那么
我有两个结构相同的桌子&一个把它们结合在一起的观点。但是,视图没有在基础表上使用索引。是否有办法使Server尊重这些索引,而不知道调用方需要哪些特定的索引?视图的计划应该与模拟视图查询的查询计划相同.
更新:即使添加查询提示以使用视图的查询中的索引,也没有任何作用!
复制:
create TABLE Uno ( Id int NOT NULL primary key identity(1,1), SomeInt int NULL, SomeOtherCrap varchar(max) null )
CREATE NONCLUSTERED INDEX IX_SomeInt ON dbo
MySql创建视图:
CREATE VIEW Foo as
select type from (select 8 as type UNION ALL select 9 as type) types;
windows上的MySQL5.7.11:工作,但MySql 5.6.25-0ubuntu0.15.04.1 (Ubuntu):不工作。
View's SELECT contains a subquery in the FROM clause
这是从5.6到5.7的变化吗?我试图在Ubuntu上将mysql升级到5.7,但在Ubuntu上不可用。有什么建议吗?谢谢。
编辑:示例是一个测试
使用PHP,可以从MySQL数据库中的一个表中选择多行,不同的WHERE子句对每个WHERE子句有特定的限制。
例如:
SELECT * FROM the_table WHERE color = 'blue' LIMIT 5 OR color = 'red' LIMIT 10
我知道上面的声明不起作用。但是,有没有一种方法可以通过对数据库的一次调用来做到这一点呢?
我在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
如果我在一个单独的php文件中有两个mysql_query命令,是不是可以把它们组合起来?
例如,我有:
$a=mysql_query(SELECT * FROM table1);
$b=mysql_query(SELECT id FROM table3);
但是我想把它们合并到一个mysql_query中,这样会更有效率吗?这样会更快吗?
我注意到,在使用两个表之间的MySQL联合时,mysql创建了一个临时表,但是临时表不使用键,因此查询速度大大减慢。
下面是一个示例:
SELECT * FROM (
SELECT
`part_number`,
`part_manufacturer_clean`,
`part_number_clean`,
`part_heci`,
`part_manufacturer`,
`part_description`
FROM `new_products` AS `a`
UNION
SELECT
`par
我尝试在MySQL上模拟合并索引,比如这里的,但是我没有ideea,为什么我不使用列类型=‘索引合并’。
这里我有一张构造表:
create table hotel(
index1 int not null,
nume varchar(100),
index2 int
);
CREATE UNIQUE INDEX hotel_index1 ON hotel (index1);
CREATE UNIQUE INDEX hotel_index2 ON hotel (index2);
insert into hotel(index1,nume,index2) values (1
我对MySQL相当陌生,我想问一问,如何才能更好地优化这个查询或重写它。
SELECT *
FROM emp
WHERE birth_date BETWEEN '1999-05-01'
AND '1999-05-31'
OR last_name in ('Bart', 'Martha', 'Lisa');
非常感谢您的协助。你能不能解释一下你为什么这么做这样我就会知道
谢谢。
对于包含两个子查询的行的示例数据集:
SELECT h.batch, li.id as line_item, d.prusr as price, 0 as advertised
FROM schema.lineitem li
INNER JOIN schema.detail d on d.line = li.line and d.item = li.item
INNER JOIN schema.header h on d.batch = h.batch
LEFT JOIN schema.specialoffer sp ON sp.LINE = d.LINE AND sp.ITEM = d.IT
这是对MariaDB (MySQL)中的后缀表查找(MySQL)的查询。给定一个电子邮件地址,它返回允许使用该地址的用户。我使用两个SQL表来存储需要搜索的帐户和别名。后缀需要一个查询来返回单个结果集,因此需要UNION SELECT。我知道后缀中有unionmap:{},但我不想走那条路,我更喜欢联合选择。emails.email列是为后缀SASL身份验证返回的用户名。查询中的%s是后缀插入要搜索的电子邮件地址的位置。将所有内容匹配回emails.postfixPath的原因是因为这是物理收件箱,如果两个帐户共享相同的收件箱,它们都应该有权使用所有相同的电子邮件,包括别名。
Table: e
这是对统一医学语言系统(UMLS)的查询,用于查找与规范化单词相关的单词。这个查询结果是165MS,但是如果我运行这个相同查询的VIEW,它需要70秒。我是mysql的新手。请帮帮我。
查询:
SELECT a.nwd as Normalized_Word,
b.str as String,
c.def as Defination,
d.sty as Semantic_type
FROM mrxnw_eng a, mrconso b, mrdef c, mrsty d
WHERE a.nwd = 'cold'
AN
由于某种原因,这两个等价的查询具有很大不同的成本。
select p.*
from properties p
where owner_phone = '+598 99 554 718'
or p.id in (
select pop.property
from property_other_phones pop
where pop.phone='+598 99 554 718'
)
具有以下成本:
而另一个:
select p.*
from properties p
where
p.
我正在做一个数据库的课程,我需要完成我的学士学位。我的数据库中有两个表,"gereport“和”大部分报告“。两个表中都有相同的信息,但我希望它们是分开的。我的问题是,我试图得到一个概览,所有的课程,我仍然需要参加的是通用电气和专业课程。我试着做以下几件事:
mysql> SELECT gereport.*, majorreport.* FROM gereport, majorreport;
我得到的结果是:
+-------+-----------+-------+------+-------+---------+-------+------+
| area | class
假设我有这样的看法
CREATE VIEW MyView
AS
SELECT Id, Name FROM Source1
UNION
SELECT Id, Name FROM Source2
然后我查询视图
SELECT Id, Name From MyView WHERE Name = 'Sally'
Server内部将首先从Source1和Source2中选择所有数据,然后应用where,还是会为每个Select语句设置where?
我有一个严重的问题,使我无法在SQL Server中使用视图。问题是在使用视图时,我经常得到超时异常。令人惊讶的是,每当我改变视图时,错误都会消失一段时间。
我的样例视图如下--假设我有两个表,Product和ProductTranslation。Product表包含产品表的主要详细信息,ProductTranslation包含产品名称和描述的其他语言的翻译。
CREATE VIEW myview
AS
SELECT
p.productid AS productId,
COALESCE(pt.prName, p.prName) AS prName,