例如,table FOO
id name type
---------------------------------------------
bigint(20) varchar(30) smallint(4)
唯一密钥name_type (名称,类型)。
将为(名称,类型)创建索引。但是,如果许多查询涉及诸如type=aNumber之类的类型,我是否需要为类型单独创建索引?
换句话说,index(name,type)包括index(type)吗?
那么mysql和oracle db呢?
我正在运行一个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使用索引,并让它执行完整的表扫描。
问
在这个MySQL查询中,我遇到了一个非常缓慢的加载基准测试,其中包含了一些WHERE和HAVING条件:
SELECT * FROM test p
WHERE p.brandid=636
AND DATEDIFF(p.registration, '2019-01-01') >= 0
AND DATEDIFF(p.registration, '2019-05-22') <= 0
GROUP BY p.invoice_num
HAVING (p.net_amount BETWEEN 0 AND 1000)
我想列出两个时间戳之间的id=1记录,最后根据时间戳对它们进行排序。
Mysql查询某些内容:
Select * from test
where (timestamp between 100099323 AND 1423699323) AND id=1
order by timestamp
重新思考数据库中有500多万份文件。
我尝试为简单的mysql查询使用索引:
Select * from test where id=1 order by timestamp
Rethinkdb查询是:
r.table('test').getAll(1, {index: 'id&
由于此设置:
mysql> show global variables like '%indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
慢查询日志不断收到:
# Time: 120607
这是用于InnoDB和MySQL 5.7的。
如果我有这样的查询:
SELECT A, B, C FROM TABLE WHERE STRCMP(D, 'somestring') > 0
是否可以在D上建立一个可供查询使用的索引?也就是说,MySQL是否足够聪明地为STRCMP函数使用btree索引?
如果没有,我如何才能重新设计查询(和/或表),以便能够对D进行字符串比较,并且可以进行某种形式的剪枝,从而不必命中每一行?
我正在对mysql表使用索引。
我的查询是这样的
EXPLAIN SELECT * FROM `logs` WHERE userId =288 AND dateTime BETWEEN '2010-08-01' AND '2010-08-27'
我对这个表日志的字段userId进行了索引,解释查询的结果如下所示。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE logs
有很多与我的主题相同的问题,但我的内容和问题似乎是不同的。在我的工作台中,我运行代码
`select(msgid) from `table`.log where
id = 'example' and status = 'active' and month(created_at) = 12
and year(created_at) = 2018 limit 0,10;`
上面的代码运行良好,但当我运行代码b时
`select(msgid), count(msgid) from `table`.log where
id = 'exa
我可以完成这个查询,但需要25秒。太长了!如何优化此查询?
SELECT COUNT(DISTINCT u1.User_ID ) AS total
FROM UserClicks u1
INNER JOIN (SELECT DISTINCT User_ID
FROM UserClicks
WHERE (Date BETWEEN DATE_SUB(:startDate, INTERVAL 1 MONTH) AND :startDate)) u2
ON u1.User_ID = u2.User_ID
WHERE (u
我正在寻找一些帮助,使我的php/MySQL代码更有效率。目前,我的PHP代码中有一条嵌套的SQL语句,它一直在运行。我知道有一种更有效的方法,在一条语句中执行查询,但我正在努力弄清楚如何做到这一点。
基本上,我有两张桌子。“顾客”和“购买”。我想浏览一下“客户”表,并计算/显示他们从“购买”表中购买了多少东西。
这是我的php/mysql代码:
$sql = "SELECT CustomerID, Username, Active FROM customers WHERE AND Active = 'Y'";
$result = mysql_query($s
我关心的是性能。
是否有可能优化下面的mysql查询?
SELECT u.name, t2.transactions, o2.orders FROM users AS u
LEFT JOIN (
SELECT t.aid AS tuid, SUM( IF( t.status = 1, t.amount, 0 ) ) AS transactions
FROM transactions AS t
WHERE ( t.datetime BETWEEN ('2018-01-01 00:00:00') AND ( '2020-01-01 23:59:5
有时我会遇到一种奇怪的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
我有以下查询:
SELECT *
FROM s
JOIN b ON s.borrowerId = b.id
JOIN (
SELECT MIN(id) AS id
FROM tbl
WHERE dealId IS NULL
GROUP BY borrowerId, created
) s2 ON s.id = s2.id
是否有一种简单的方法对此进行优化,以便我可以直接进行连接并利用索引?
更新
created字段是GROUP BY语句的一部分,因为由于我们的MySQL版本和正在使用的ORM的限制,有可能拥有具有相同created时间戳值的多个记录。因此,我需要
我有以下查询,该查询工作正常,但运行非常糟糕。我怀疑我的问题是关于内部联接声明中的两个比较条件。这两个字段都有一个索引,但是MySQL中的查询优化器似乎忽略了它们。以下是我的疑问:
编辑:将查询更改为使用Gordon建议的查询,因为它保持了相同的结果,但执行速度更快。尽管EXPLAIN语句仍然不愉快,但是输出如下所示。
SELECT a.id
FROM pc a INNER JOIN
(SELECT correction_value, MAX(seenDate) mxdate
FROM pc FORCE INDEX (IDX_SEENDATE)
WHE
MySQL内置的缓存确实使这个问题在一天中没有意义,但在第一次运行以下查询时,性能非常糟糕:第一次使用300秒以上,而随后的查询可以在毫秒内完成。用SQL_NO_CACHE运行这个程序需要2-4秒(!)在这种情况下,这是非常可以接受的--但是初始运行时不是。
SELECT DATEDIFF( bt.`datetime`, st.`datetime`) AS 'day_separation'
FROM `smallerTable` AS st
LEFT OUTER JOIN `bigTable` AS bt ON bt.item_id = st.item_id
AND bt.
我有一个客户端运行一个php图片库(在php 5.5上,mysql 5.5上,使用myisam表),它使用目录树方法。不幸的是,他们库应用程序中的一些查询需要非常长的文件端口。令人反感的查询:
SELECT `name`, `slug`
FROM `db_table`
WHERE `left_ptr` <= '914731'
AND `right_ptr` >= '914734'
AND `id` <> 1
ORDER BY `left_ptr` ASC
id、left_ptr和right_ptr上都有索引,但根据解释,
我有这样的模式 create table table1
(
id int auto_increment primary key,
name varchar(2) null,
position int null,
);
create index table1_position
on table1 (position);
create table table_2
(
id int auto_increment primary key,
table1_i
我们的MS SQL Server数据库有一个表T,其中包含以下字段和数据:
Name | Begin | End
-----------------------
A | 3 | 6
B | 2 | 4
C | 4 | 5
...................
我通常使用这样的查询:
SELECT *
FROM T
WHERE 5 BETWEEN Begin AND End
查找在"Begin“和"End”字段之间包含常量5的记录。执行计划是执行整个表扫描。如何设计表结构和索引以避免表扫描?谢谢!
我目前使用的是mongodb,但我也已经习惯了MySQL。
我在尝试思考,我们可以有一个双字段索引吗?
例如,想象一下这个表:
Firstname | LastName
============+=================
Bob | Bob
Bob | B
John | Bob
一个索引,在这个索引中,我们可以让数据库将First Name和Last Name作为一个整体来实施唯一性(而不必将开销作为第三个字段作为两者的组合,或者作为散列等
所以如果我们输入{ 'firstname: 'bob',
下面的SQL在MySQL中运行非常慢。对于一个250,000行的表(跨越3年的时间线),它需要一个多小时的时间。
select L.order_date,
L.segname,
sum(O.product_total) as c_product_total,
sum(O.num_orders) as c_num_orders
from report_PurchasesByOrderDate_Hour_bySegment as L
join report_PurchasesByOrderDate_Hour_by