-
使用联接而不是子查询(子查询)来选择最合适的字段属性。
使用 union 而不是临时表。
使用事务性外键索引进行手动创建。
避免使用非常优化的非常优化的查询。
-
子查询优化策略。
对于不同类型的子查询,优化器会选择不同的策略。
1.对于 in, =any 子查询,优化器具有以下策略选项:
semijoin
materialization
exists
2.对于 not in 和 <>all 子查询,优化器具有以下策略选项:
materialization
exists
3.对于派生表,优化器具有以下策略选项:
derived merge,将派生表合并到外部查询中(引入);
将派生表具体化为内部临时表,然后将其用于外部查询。
注意:update 和 delete 语句中的子查询不能使用半联接或具体化优化策略。
-
第二件事是 like 不使用索引,结果是你创建了一个索引但找不到结果,这与联合无关。
即使您有一个查询,它也会遍历整个数据库,并且不会在索引中查询。
在这种情况下,文本查询通常通过分词创建文件索引来执行,例如 lucene
以目前的数据量,如果想通过SQL解决文本的类似查询,再通过数据库已经不够了
-
我也有同样的问题,我的环境是ms sql
-
**如果我不发布它,我能帮你什么?
-
如何优化MySQL数千万次数据插入和查询。
大数据库优化SQL、索引、横切和纵切! 多数据库、主从、读写分离。
-
MySQL索引有五种类型:主键索引、公共索引、唯一索引、全文索引和聚合索引(多列索引)。
唯一索引和全文索引很少使用,我们主要关注主键索引、普通索引和聚合索引。
1)主键索引:主键索引是添加到主键上的索引,当设置主键时,MySQL会自动创建主键索引。
2)普通索引:在非主键列上创建索引;
3)聚合索引:在多个列上创建索引。
c) 索引的语法:
查看表的索引:显示表名中的索引;
若要创建普通索引,请更改表表名,添加索引索引名称(带索引的列)。
若要创建聚合索引,请更改表名,添加索引索引名称(第 1 列带索引,第 2 列带索引)。
删除表的索引:在表名上删除索引索引名;
4)性能测试。
测试环境:Blogger 的工作桌面。
处理器: Intel Core i5-4460 ;
内存 8G;
-
直接使用 limit start, count 分页语句,这也是我的程序中使用的方法:
select * from product limit start, count
当起始页较小时,查询没有性能问题,我们来看一下分页的执行时间分别为 10、100、1000 和 10000(每页 20 个条目),如下所示:
从产品限制 10、20 秒中选择 *。
从产品限制 100 中选择 *,20 秒。
从产品限制 1000 中选择 *,20 秒。
从产品限制 10000 中选择 *,20 秒。
我们已经看到,随着起始记录的增加,时间也随之增加,这说明分页语句的限制与起始页码有很大关系,所以让我们把起始记录改为 40w(即记录的一般记录)从乘积限制 400000 中选择 *,20 秒。
让我们看看我们记录最后一页的时间。
从产品限制866613中选择 *,20 秒。
是难以忍受的。
从中可以总结出两件事:
1)limit语句的查询时间与起始记录的位置成正比。
2)MySQL的limit语句非常方便,但不适合记录较多的表。
-
select * from collect where id in (9000,12,50,7000);0秒即可完成检查!
id in (str) 非常快,基数仍然是 0 秒。 如果是这样的话,MySQL应该能够轻松处理数千万的数据。
高 CPU 使用率的解决方案如下:
1.同时按住键盘上的Ctrl + Alt + Delete,然后单击“启用任务管理器(T)”以查看CPU使用率。 (这里的 CPU 使用率只有 14%,因为游戏没有运行,后台程序也没有打开很多。 ) >>>More
在项目开发中,总是需要检查后台执行的SQL语句,MySQL数据库也不例外。 命令,可以通过输出结果的字段说明来分析执行的SQL语句的类型,但不适合一般的初学者用户,所以通过日志文件查看SQL语句是最直接的方式。 >>>More