Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sql选择语句优化_Python_Mysql_Sql - Fatal编程技术网

Python Sql选择语句优化

Python Sql选择语句优化,python,mysql,sql,Python,Mysql,Sql,我在sql中创建了一个测试表,其信息模式如下所示: import pandas as pd import mysql.connector db = mysql.connector.connect(host="localhost", user="root", passwd="abcdef") pointer = db.cursor() pointer.execute("use holdings") x = &quo

我在sql中创建了一个测试表,其信息模式如下所示:

import pandas as pd
import mysql.connector
 
db = mysql.connector.connect(host="localhost", user="root", passwd="abcdef")
pointer = db.cursor()
pointer.execute("use holdings")
x = "Select * FROM orders where tradingsymbol like 'TATACHEM'"
pointer.execute(x)
rows = pointer.fetchall()
rows = pd.DataFrame(rows)
stock = rows[1]

现在,我使用python脚本提取此信息,其代码如下所示:

import pandas as pd
import mysql.connector
 
db = mysql.connector.connect(host="localhost", user="root", passwd="abcdef")
pointer = db.cursor()
pointer.execute("use holdings")
x = "Select * FROM orders where tradingsymbol like 'TATACHEM'"
pointer.execute(x)
rows = pointer.fetchall()
rows = pd.DataFrame(rows)
stock = rows[1]

生产表包含200个唯一的交易符号,其模式与测试表类似

我对以下声明表示怀疑:

x = "Select * FROM orders where tradingsymbol like 'TATACHEM'"
我将不得不将tradingsymbols的值替换200倍,这是无效的


有没有一种有效的方法可以做到这一点?

如果我理解正确,您的问题是希望避免对每个交易符号发送多个查询,对吗?在这种情况下,以下内容可能会有所帮助。然后,您只需向包含所有所需TradingSymbol的数据库发送一个查询。如果你想用不同的交易符号做不同的事情,你可以选择熊猫的子集

另一个性能改进可能是因为这在某种程度上加快了数据帧的创建

为了提高效率,还有两件事需要补充:

  • 确保在MySQL中为tradingsymbols编制索引,以加快查找过程
  • 将tradingsymbols设置为枚举,以确保不接受任何打字错误或类似错误。否则,上述“IN”方法也不起作用,因为它会进行全文比较

如果您有一个匹配字符串“=”将提供比LIKE更好的性能,但上面的链接很好地解释了为什么匹配字符串比LIKELIKE接受通配符性能更好。这意味着它需要解析您提供给它的任何内容,因此如果您进行直接比较,就会产生大量开销anyways@AnnaSemjén-
x-LIKE'…'
不带通配符将变成
x='…'
。因此,没有性能差异。