Problem

Using MySQL Connector/Python, you are calling a stored procedure which
is also selecting data and you would like to fetch the rows of the
result.

案例分析3:

用exists 和 in区别:结论

1.
in()适合B表比A表数据大的情况(A<B)

select * from A

where id in(select id from B)

2.
exists()适合B表比A表数据小的情况(A>B)

  select * from A

  where exists(

  select 1 from B where B.id =
A.id

  )

3、当A表数据与B表数据一样大时,

in与exists效率差不多,可任选一个使用.语法

****************************************************************************

ex_question_r_knowledge(A)表数据量大,ex_subject_point表数据量小(B)(A>B)

用exists适合

SELECT *
FROM ex_question_r_knowledge
WHERE ex_question_r_knowledge.SUBJECT_POINT_ID IN
(
    SELECT ex_subject_point.SUBJECT_POINT_ID
    FROM ex_subject_point
    WHERE ex_subject_point.SUBJECT_ID=7
)

执行时间是:38.404s

SELECT *
FROM ex_question_r_knowledge
WHERE  exists
(
    SELECT 1
    FROM ex_subject_point
    WHERE ex_subject_point.SUBJECT_ID=7
    AND ex_subject_point.SUBJECT_POINT_ID = ex_question_r_knowledge.SUBJECT_POINT_ID
)

执行时间是:13.537s

*************************************************************************

ex_subject_point表数据量小(A),ex_question_r_knowledge(B)表数据量大(A<B)

用in适合

SELECT * 
FROM ex_subject_point 
WHERE ex_subject_point.SUBJECT_POINT_ID IN(
   SELECT ex_question_r_knowledge.SUBJECT_POINT_ID 
  FROM ex_question_r_knowledge 
    WHERE ex_question_r_knowledge.GRADE_TYPE=2 )

执行时间是:1.554s

SELECT *
    FROM ex_subject_point
    WHERE  exists(
    SELECT ex_question_r_knowledge.SUBJECT_POINT_ID
    FROM ex_question_r_knowledge
    WHERE ex_question_r_knowledge.GRADE_TYPE=2
    AND ex_question_r_knowledge.SUBJECT_POINT_ID= ex_subject_point.SUBJECT_POINT_ID
)

执行时间是:11.978s

4.
输入或者修改注册者姓名,公司,然后点击Generate生成序列号。 

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

select id from t where num
is null

最好不要给数据库留NULL,尽可能的使用 NOT
NULL填充数据库.

备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。

不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num =
0

安装完后不要打开

Discussion

The stored_results() method
of cursor object is retiring an iterator object which will go over the
results proceeded after calling the stored procedure. Each result is
actually a MySQLCursorBuffered object.

You could also use
the with_rows cursor property
to check if the cursor actually could return rows or not (for example,
for SELECT statements). An example is provided in
the documentation.

案例分析:

在mysql数据库中对字段进行null值判断,是不会放弃使用索引而进行全表扫描的。

澳门微尼斯人手机版 1

SELECT ex_question_junior.QUESTION_ID
FROM ex_question_junior 
WHERE IS_USE is NULL

执行时间是:11.729s

澳门微尼斯人手机版 2

SELECT ex_question_junior.QUESTION_ID
FROM ex_question_junior 
WHERE IS_USE =0

执行时间是12.253s

时间几乎一样。

 

Solution

For this example we create a stored procedure which is
executing SHOW SLAVE STATUS.

“`python cnx = mysql.connector.connect(user=’scott’,
password=’tiger’, database=’mining’) cur = cnx.cursor()
cur.execute(“DROP PROCEDURE IF EXISTS slave_status”) proc = “CREATE
PROCEDURE slave_status () BEGIN SHOW SLAVE STATUS; END” cur.execute()
cur.call(“slave_status”)

for result_cursor in cur.stored_results(): for row in result_澳门微尼斯人手机版,cursor:
print(row[0]) “`

The result from the above would be:

shell $ python foo.py Waiting for master to send event

4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

今天在macOS 系统下搭建
Java开发环境,需要配置MySQL,按照Windows的习惯,使用Navicat for MySQL
操作比较习惯。然后找不到比较好的破解版,这里介绍一个老版的,还是英文版的工具安装破解说明。

案例分析:

SELECT ex_question_junior.QUESTION_ID
FROM ex_question_junior 
WHERE ex_question_junior.GRADE_ID=15

执行时间:17.609s (多次执行,在17s左右徘徊)

优化后:给GRADE_ID字段添加索引后

执行时间为:11.377s(多次执行,在11s左右徘徊)

备注:我们一般在什么字段上建索引?

这是一个非常复杂的话题,需要对业务及数据充分分析后再能得出结果。主键及外键通常都要有索引,其它需要建索引的字段应满足以下条件:

  a、字段出现在查询条件中,并且查询条件可以使用索引;

  b、语句执行频率高,一天会有几千次以上;

  c、通过字段条件可筛选的记录集很小,那数据筛选比例是多少才适合?

这个没有固定值,需要根据表数据量来评估,以下是经验公式,可用于快速评估:

小表(记录数小于10000行的表):筛选比例<10%;

大表:(筛选返回记录数)<(表总记录数*单条记录长度)/10000/16

单条记录长度≈字段平均内容长度之和+字段数*2

以下是一些字段是否需要建B-TREE索引的经验分类:

澳门微尼斯人手机版 3

2.
下载注册机:Core_keygen-2.dmg

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注