我有一个表,其中包含一个约40k行的样例集,每行包含一个Point (经度和纬度)。我正在使用MySQL的空间扩展来查找边界内存在哪些点。
如果我在一个我知道会有很少结果的边界内进行搜索,那么索引将按其应有的方式使用。然而,我的测试数据集主要由英国各地的位置组成(较大的实时数据集在百分比上可能是相似的)。当我在这个边界框中搜索时,没有使用索引,而是执行了全表扫描:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE e
我有一个具有lat,long坐标的零售位置数据的sql表。我的应用程序查询表以使用python来提取数据。以下是一些样本数据:
table1
id name lat long
1 post 37.788151 -122.407570
2 sutter 37.789551 -122.408302
3 oak 37.815730 -122.288810
我有一个点坐标37.785980和-122.410851,我想从表中找出附近的行,比如在距离坐标的0.5英里半径内。
业绩问题。由于性能不佳、向客户端应用程序发送数据的时间过长以及存储/内存问题,我无法查询
SELECT *
FROM inventory
WHERE inventory.zip IN (93650,93750,93765,93729,93710,93740,93711,93720,93704,93741,93705,93755,93791,93790,93794,93793,93726,93792) AND
inventory.price >= 1000 AND
inventory.year BETWEEN 1977 AND 2011
ORDER BY price ASC LIMIT 0, 25
数据库是MySQL InnoDB tables
我知道完全通配符搜索(例如:LIKE '%word%')会导致全表扫描。
当我使用“喜欢”或“不喜欢”时,MySQL是否聪明到只扫描结果,而不是扫描整个表?
例如,假设我有一个从1000000行中选择10行的查询。查询类似于select * from table where id <= 10 and description NOT LIKE '%word%'。MySQL是否足够聪明,只扫描这10行结果?
(我的查询非常不同,但这是它的要点:我希望在大表中的结果集中使用NOT。假设所有的东西都有索引。客户端版本“14.14disrade5.7.29,用于Li
1.,所以如果我在有5.000.000条目的toys表中搜索单词ball,那么它会搜索所有的500万条吗?
我认为答案是肯定的,因为它应该如何知道其他,但请让我知道。
2. If yes:如果我需要从那个表中获得更多的信息,那么只查询一次并处理结果不是更符合逻辑吗?
示例
我有这样的桌子结构,例如:
id _ toy_name _ state
现在我应该像这样查询
mysql_query("SELECT * FROM toys WHERE STATE = 1");
但是,如果查询所有表mysql_query("SELECT * FROM toys");,然后执行
有没有办法执行select查询,在表中搜索给定的单词,如果找到,则退出查询,不再继续计数?
例如,我有一个表(t1),其中包含以下值:
id tag tagdate
1 my 1-1-2012
2 name 1-1-2012
3 you 1-1-2012
4 foo 1-1-2012
5 make 1-1-2012
6 ir 1-1-2013
7 too 1-1-2013
.. .. ........
我使用的是MySQL 5.5.37。我有一个有列的表
`NAME` varchar(100) COLLATE utf8_bin NOT NULL
并且我打算对name列进行部分搜索,比如
select * FROM organnization where name like ‘%abc%’
请注意,我希望搜索字符串“abc”出现在任何地方,而不一定出现在开头。鉴于此,有没有什么索引可以用来优化查询执行呢?
我正在从mysql数据库表中选择数据。当我搜索一个特定的日期时,我的索引是正常的。当我在两个日期之间搜索数据时,索引不起作用,查询需要很长时间。有人知道如何改进查询或索引吗?
查询A:
EXPLAIN SELECT * FROM sal_import
WHERE dateStats>="2011-07-28" AND dateStats<="2011-07-30" GROUP BY f_shop
id select_type table type possible_keys key key_len ref rows Ex
这里是MySQL noob。
我正在尝试运行下面的语句到
EXPLAIN SELECT * FROM actor as a
INNER JOIN film_actor as fa on a.actor_id = fa.actor_id
INNER JOIN film AS f ON fa.film_id = f.film_id;
输出是
id| select_type| table | partitions | type | possible_keys | key | key_len | ref | ro
我的user表有一个"name“列,其中包含如下信息:
Joe Lee
Angela White
我想高效地搜索名字或姓氏。名字很简单,我能做到
SELECT * FROM user WHERE name LIKE "ABC%"
但是对于姓氏,如果我这样做的话
SELECT * FROM user WHERE name LIKE "%ABC"
这将是非常缓慢的。
因此,我正在考虑计算输入的字符数,例如,"ABC“有3个字符,如果我只能搜索name列中的最后三个字符,那就太好了。所以我想要这样的东西
SELECT * FROM user WHERE
我今天偶然发现了这件事,非常震惊。在搜索Google时,我通常会看到这个问题在使用limit时受到了尊敬,这使得它返回速度慢了。
我有一个包含几百万行的MySQL表。PK是id,因此它是一个唯一的索引。
当我对表单select a, b, c, ... from table where id in (1, 2, 3, ..., 5000)执行查询时,需要大约15-20分钟才能获取所有结果。但是,当我在最后简单地添加limit 1000000 (我使用的数字比需要的要大得多)时,它会在几秒钟内返回。
我知道,使用limit的数量比返回的帮助小,因为一旦“配额”被填满,它就会返回,但在这里,我找不
我有一个有数十万行的mysql数据库。我想在其中一个字段中搜索一个术语,但仅在最后10000行中搜索。搜索整个表花费的时间太长了,而且我要查找的结果不太可能比最后10000行更旧。有没有一种方法可以像下面这样构造一个查询:
SELECT body from <last 10000 rows of table> where body like '%searchTerm%'
我正在将我的.NET/MSSQL迁移到RoR/MySQL/EC2/Ubuntu平台。在我将所有现有数据转移到MySQL中后,我发现MySQL查询速度非常慢,即使是像查询select count(*) from countries这样的超基本查询,它也只是一个国家/地区表,只包含大约200条记录,但查询需要0.124ms。这显然是不正常的。
我是MySQL的新手,谁能告诉我可能的问题是什么?或者安装MySQL后我应该打开的任何初始优化按钮?
我试图运行一个查询,以查找两个表上的多个电话号码列之间的任何匹配项,这花费的时间太长(>5分钟),而这需要尽可能多地过滤数据。我已经将实际的列分隔开,我可以从这两个表中搜索到它们自己的表中,以减少总行数。
--这是来自我继承的一个遗留应用程序.
查询
select count(b.bid)
from customers_with_phone c,buyers_orders_with_phone b
where
(b.hphone=c.pprim or b.hphone=c.phome or b.hphone=c.pwork or b.hphone=c.pother)
or
嗨,我对MySQL指数有一定程度的了解。
创建表时,我可以创建一个索引
CREATE TABLE Product (
-> ID SMALLINT UNSIGNED NOT NULL,
-> ModelID SMALLINT UNSIGNED NOT NULL,
-> PRIMARY KEY (ID),
-> INDEX (ModelID)
在创建表之后添加索引
CREATE INDEX index_name
ON table_name (column_name)
还可以通过以下方式更改索引
ALTER TABLE
我使用PDO搜索搜索结果的MySQL表。我的查询如下
$sql = "SELECT * FROM users WHERE username LIKE :username OR name LIKE :name ORDER BY uniqueid DESC LIMIT 6";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':username', '%'.$query.'%');
$stmt->bindValue(':name', $query.'
这是我关于stackoverflow的第一个问题,但到目前为止我已经读了好几年了。因此,如果我的问题不合适,请原谅。我已经在网上搜索了几个小时,什么也没找到。
我目前正在优化一个使用MySQL数据库的系统的查询。一个表保存另一个表的总和,以加快显示这些总和的前端。我最终得到的查询替换了代码中的多个其他查询和循环...如果它可以工作:)
这是一个不能按预期工作的:
SELECT
v.*,
(
SELECT COUNT(DISTINCT i.display_item_id)
FROM search_index_item i
WHERE i.path LIKE '238/2/
我在MySQL中有一个表,我想通过执行多个select语句从表中选择不重叠的相等部分来并行查询该表,例如:
1. select * from mytable where col between 1 and 1000
2. select * from mytable where col between 1001 and 2000
...
问题是,在我的例子中,列是varchar。在这种情况下,我如何拆分查询?
在Oracle中,我们可以结合使用NTILE和rowids进行操作。但我没有在MySQL的情况下找到类似的方法。这就是为什么我的想法是散列列的值,并根据我想要的相等部分的数量来修改它。或者
我遇到了一个特殊的脚本,它使用了一种特殊形式的equi连接。
SELECT *
FROM
per_assignments a, per_assigment_types b
WHERE
a.assignment_status_type_id + 0 = b.assignment_status_type_id
为什么在equi连接中添加了零?我知道这与避免索引搜索有关,但仍然有人可以解释相同的全貌。提前感谢
编辑:
它与表/列声明无关。据我所知,这与SQL调优有关。
我发现的是:-
在较小的索引搜索中使用--如通常所做的那样,这将一次搜索完整的表。
但是我真的不知道普通的equi连接到底有什