我刚刚发现使用InnoDB引擎的MySQL的以下行为。有没有办法解释执行时间上的显著差异?
第一个查询:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp BETWEEN 1207000800290 AND 1207690900290
执行时间:0.715秒
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2
我有两张桌子如下所示
我在两个表上都有如下所示的综合索引:
users表有一个复合索引:(login_type_id,language_id,enabled,level) 地址表有一个复合索引:(user_id,city_id,enabled)
我想执行以下查询
select * from users u
left join address adr
on u.id = adr.user_id
where u.login_type_id = 1
and u.langauge_id = 1
and u.enabled = true
and adr.city_id in (1,2,3,4,
我有个疑问
Select * from tbl1
WHERE
( price > 10
AND qty > 200
AND condition=1
AND name like '%abc%')
我的问题是MySQL将如何处理这个问题?我担心的是,我希望以这种方式运行查询,以便根据条件减少结果。
例如
( price > 10 AND qty > 200 AND condition=1 And name like '%abc%')
首先,MySQL应该过滤具有price > 10的记录,并在生成的数据集上应用下一个
我有以下MYSQL查询:
SELECT statusdate,consigneenamee,weight,productcode,
pieces,statustime,statuscode,statusdesc,generatingiata,
shipmentdate,shipmenttime,consigneeairportcode,signatory
FROM notes
where (shipperref='180908184' OR shipperref='180908184'
OR shipperref='18090
我有一张MySQL桌:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
other_id INT NOT NULL,
expiration_datetime DATETIME,
score INT,
PRIMARY KEY (id)
)
我需要以以下形式运行查询:
SELECT * FROM mytable
WHERE other_id=1 AND expiration_datetime > NOW()
ORDER BY score LIMIT 10
如果我将此索引添加到m
在启动查询之前,有人知道MySQL是否涉及到任何预处理优化吗?
考虑以下查询:
string query = "SELECT giveaway_id FROM giveaways WHERE status >= @minStatus AND status <= @maxStatus AND type >= @minType AND type <= @maxType";
如果@minStatus和@maxStatus相等,以及@minType和@maxType,我们可以以更优化的形式编写上述查询:
string query = "SELECT gi
我正在使用一个MariaDB (MySQL)表,该表包含一些地图点(纬度和经度)和数量的信息。
我正在进行许多检索这些点的查询,我希望使用索引优化查询。我不知道怎么把它做好。
我的问题如下:
SELECT p.id, p.lat, p.lon, p.quantity
FROM Points p
WHERE ((p.lat BETWEEN -10.0 AND 50.5) AND
(p.lon BETWEEN -30.1 AND 20.2) AND
(100 <= p.quantity AND 2000 >= p.quantity))
ORDER
我正在使用mysql作为我的数据库。我有20,000条记录,共30列。我正在使用6个列(txn_date、v_name、transaction_status、sid、pnum、txn_num)创建一个复合索引。当我对以下在where子句中有6列的查询进行解释时,解释是使用index直到某个txn_date,然后根据explain命令的输出使用where条件
SELECT * FROM transactions
WHERE txn_date between '2021-01-10' and '2021-01-19'
and v_name ='Vo
我在Rails应用程序中有一个查询,其中有一个奇怪的一元条件:
SELECT * FROM messages WHERE (active) ORDER BY id DESC;
我甚至不知道这样的条件是允许的,而且在任何地方都找不到描述这种语法的文档。实验表明,这是一种相当于
SELECT * FROM messages WHERE active!=0 ORDER BY id DESC;
问题是Mysql只对第二个变量使用索引:
mysql> explain SELECT * FROM messages WHERE (active) ORDER BY id DESC;
+----+-
我很好奇MySQL是否会在内部优化一个在同一列上具有两个或多个WHERE X IN Y条件的查询。
作为我为什么要问的一个快速背景:所讨论的应用程序使用一个PHP查询生成器,并且在两个不同的位置将条件添加到查询中。基于权限的限制首先在代码的一个区域自动添加到查询中。在一个单独的区域中,检索受限制的SELECT查询对象(不需要知道以前做了什么),并且除了基于权限的限制之外,还添加了额外的用户选择的筛选器限制,这可能会在一个字段中产生两个WHERE条件。
对于一个精心设计的小示例,假设有一个简单的表,如:
CREATE TABLE users (
userId INT(12) NOT NU
背景:
database engine : innodb
Table a : size:800 000
column : createDate ,isNomal ,webid …………………………
index :(createDate ,isNomal ,webid),(webid)
Mysql声明:
select count(*) from a h
where h.createDate BETWEEN '2014-6-1 00:00:00' and
目前,我正在尝试使用子句中的几个(3)查询一个表,如:
SELECT *
FROM table
WHERE
a IN (2884,5320)
AND
b IN ('a', 'b', 'c')
AND
c IN (1, 2, 3)
AND d='abcd'
AND date BETWEEN 0 AND 1383177599
该表的索引与index(a, b, c, d, date)类似
但是,当我对查询运行解释时,解释程序会显示没有适当的索引可使用。即使我是FORCE
mysql表中有一个表,它有大约176万条记录,而且还在增长。似乎它拥有的记录越多,获得的速度就越慢。在下面运行一个简单的查询大约需要65秒钟。Date_run是一个时间戳字段。我想知道这是否会使跑步速度变慢。有任何建议,我可以调整在选项文件,以使这个宝宝更快?
select *
from stocktrack
where date(date_run) >= '2014-5-22'
and date(date_run) <= '2014-5-29'
mysql版本5.6
Windows 8.1 64位
Intel Core i7-4770
假设我有一个包含字段a、b、c、local_time和e的mysql innoDB表Foo。Foo具有名为foo_index的复合索引:(a,b,c,local_time)
下面的查询会利用foo_index对local_time进行过滤吗?
SELECT count(*) AS cnt
FROM Foo force index(foo_index)
WHERE (a = '332719'
AND b IN ('2', '-3')
AND c = '1'
AND local_time > '20
目前,我正在试图找出哪个查询实际上更好地使用了索引,哪些查询更快(这两种情况并不总是一致的)。
我已经运行了两次相同的查询,但是为了最大限度地提高性能,对索引列进行了调整。
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
很简单的问题,但很难找到解决办法。具有2,498,739行的Address表有一个min_ip和max_ip字段。这些是用于过滤的表的核心锚。
查询非常简单。
SELECT *
FROM address a
WHERE min_ip < value
AND max_ip > value;
因此,为min_ip和max_ip创建索引以加快查询速度是合乎逻辑的。
为下列事项创建的索引。
CREATE INDEX ip_range ON address (min_ip, max_ip) USING BTREE;
CREATE INDEX min_ip ON address (mi
我有一个表单的MySQL表
CREATE TABLE `myTable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`timestamp` datetime NOT NULL,
`fieldA` int(11) NOT NULL,
`fieldB` int(11) NOT NULL,
....
)
该表大约有500,000,000行,其余字段为浮点型。
我将使用的查询将采用以下形式:
SELECT * FROM myTable
WHERE fieldA= AND fieldB= AND timestamp>'' a
我在一个(x double, y double, z double)表中有大约100亿行坐标为MySQL的点。我已经在x、y和z列上创建了索引索引,这样按范围进行筛选就很好了。
查询模板:( {}中的内容被实际值替换)
select id from points_table where
x between {x-5} and {x+5} and
y between {y-5} and {y+5} and
z between {z-5} and {z+5};
奇怪的是,尽管返回的结果数量大致相同,但奇怪的是,尽管返回的结果数量大致相同,但这个查询始终占用某些点的~0.05
我不明白为什么MySQL不为下面的查询使用索引。
我有一个名为users的表,它的创建表是
📷
此表包含数据。
现在我正在运行select语句,它正在检查它的查询执行计划。
为声明
desc select *
from users
where users.created_at between '2019-05-04' and '2019-05-06';
输出是
📷
但是我使用的是DateDiff函数查询不使用索引。
desc select *
from users
where DATEDIFF(users.cr
我正在运行一个MySQL服务器(5.5),它有一个大表(大约有10M个记录)。这个表是一种日志,它在2列上有一个主键:
id <- integer,
date <- datetime
连接到此数据库的应用程序正在发送一个查询,其内容如下:
SELECT * FROM bigtable
INNER JOIN other_table
ON ....
WHERE UNIX_TIMESTAMP(date) BETWEEN #somevalue# AND #somevalue2#;
我发现这个查询花了那么多时间来执行。我知道有些函数可以阻止MySQL使用索引,并让它执行完整的表扫描。
问
我有一个大约2亿行的表,如下所示:
id, name, timestamp, class
我在每一列上都有一个索引,并且我试图运行这样的查询:
SELECT name
FROM t
WHERE timestamp >= date_x AND
timestamp < date_y AND
class='class_a'
这个查询只在class上使用索引,当date_x和date_y大约是一个月时,一个部分解释说它会看到大约1250万行,这比timestamp上的索引要少。
当日期范围较小时,此查询显然返回得很快,但随着范围的增加,该查询很快就会
表结构:
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| total | int(11) |
我正在努力优化MySQL查询。
select *
from course as t1
left join semester as t3 on t1.semester=t3.id
where t1.visibleFrom <= '1364621522'
and '1364621522' <= t1.visibleTo
order by t3.begin desc, t1.name;
这是由EXPLAIN报告的,以使用对课程表的全查询。该表有几个不同的索引(visibleFrom、visibleTo、两者的组合、名称、学期)。name是一个va
在一个小型PHP程序上运行查询时,我遇到了问题。当我使用*选择所有列时,返回结果比只使用一个列要花费更多的时间。
正在运行的查询如下:
mysql> SELECT cupom_fiscal_id FROM cupom_fiscal WHERE send_date IS NULL AND travado IS
FALSE AND status = 0 AND ong_id = 1618 AND data_emissao BETWEEN '2014-04-01' AND '2014-
05-05' LIMIT 1;
在这种情况下,它返回:
1 row in
我有一个问题要问一位专家,是如何构造无害数据库索引的(mysql 8.0.18)
假设表中有4个varchar列,行数为10亿行:
country, state, city, attraction
我有疑问,寻找所有或特定的景点,无论是按国家,州,城市或景点名称。
query1: "select * from table where attraction like 'asd%' and country = 'X'"
query2: "select * from table where attraction like 'asd%
我们在许多地方使用复合索引,它们工作得很好。我们的平台有一个相对复杂的“报表生成器”,它根据用户选择的内容动态地编写查询。我们根据常见的查询选择索引,而且我们的复合索引通常与用户所需的内容很好地一致。
例如(简化一吨),用户的报告将变成查询:
SELECT
colA,
colB,
SUM(col1),
SUM(col2)
FROM
someTable
WHERE
colA = "foo"
AND colB = "bar"
AND colC = "baz"
GROUP BY 1, 2;
这张桌子看起来就像:
CREA
我有一个疑问。我有一个sql查询,
select p from Person p where p.succeedOn IS NOT NULL and p.status=? and p.parentId=? and p.personId>?
我已经在personId上创建了索引。我的同事说,索引不能使用>(大于)或<(小于),但可以使用<和>,因为我们定义了限制。我在谷歌上搜索了一下,但找不到。我正在使用mysql DB。谢谢